[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Массив по ключам
sendxt
Всем привет, нужен совет как сделать вывод массива по ключам в разных местах или по разным условиям ...

Вид массива : Он большой до 100 ключей примерно, суть в разных местах нужны определённые ключи массива.. И как это лучше или вообще осуществить, перебором через форичь и сравнением ключей?

Если не заморочно увидеть примерчик был бы рад )



1 => array(
USER_TYPE_OFFICE => array(
'class' => array( 'no' => array( 9, 10 ), ),
)
),

3 => array(
USER_TYPE_CLASSHEAD | USER_TYPE_SYSADMIN | USER_TYPE_PRINCIPAL |

),


sendxt
На данный момент под каждым условием приходится закидывать в return куски одно большого массива
Игорь_Vasinsky
создай "правила".

если я правильно понял - тебе нужно, к примеру, часть ключей вывести на одной странице, часть на другой - утрированно

$rules = array(
'page1'=>array('key1','key10','key100'),
'page2'=>array('key2','key20','key200'),
)


$page = 'page2';

//Определяем какое правило необходимо (для конкретной страницы)
switch($page){
case 'page1' : $rulesKeys = $rules['page1']; break;
case 'page2' : $rulesKeys = $rules['page2']; break;
default : $rulesKeys = $rules['page1']; break;
}

foreach($rules as $k=>$rule){
if(in_array($k, $rulesKeys)){
//к примеру
echo implode(',', $rule);
}
}



если речь о многомерном массиве - то есть такое понятие - рекурсия - оберни в функцию цикл и вперёд и с песнями.

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
sendxt
Игорь_Vasinsky


Массив с которым нужно работать...


$reportArr = array(
// report ID
1 => array(
USER_TYPE_OFFICE => array(
'class' => array( 'no' => array( 9, 10 ), ),
)
),

3 => array(
USER_TYPE_CLASSHEAD | USER_TYPE_SYSADMIN | USER_TYPE_PRINCIPAL |
'class' => array( 'no' => array( ), ),
),

USER_TYPE_TEACHER => array(
'group' => array( 'classNo' => false, ),
),
),
);




У меня на выходе должно быть что-то типо :

С нужными ключами

 return  array(
// report ID
1 => array(
USER_TYPE_OFFICE => array(
'class' => array( 'no' => array( 9, 10 ), ),
)
),

3 => array(
USER_TYPE_CLASSHEAD | USER_TYPE_SYSADMIN | USER_TYPE_PRINCIPAL |
'class' => array( 'no' => array( ), ),
),

USER_TYPE_TEACHER => array(
'group' => array( 'classNo' => false, ),
),
),
);



$rules = array(
'report1' => array('1','3','6','7','8','9','10','11','13','14','80','81','82','12','15'
,'4','91','16','17','18','83','84','85'
,'86','87','88','89','90','92','93','95','96','97','98','99','100'),

'report2' => array('6','80','81'),

'report3' => array('1','3','103','7','8','9','10','11','13','14','80'
,'81','82','12','15','4','16','17','18','83','85','17','86','88','92'
,'86','88','92','93','95','96','97','98','99','100','101','102'
),
);


if($markSystem === 1 && $schoolType !== 3 && $this->SchoolId != 1711) {
$page = 'report1';
}

if($markSystem === 3 || $this->SchoolId == 1711) {
$page = 'report2';
}

if($schoolType === 3) {
$page = 'report3';
}

// Define which rules need for statements
switch($page){
case 'report1' : $rulesKeys = $rules['report1']; break;
case 'report2' : $rulesKeys = $rules['report2']; break;
case 'report3' : $rulesKeys = $rules['report3']; break;
default : $rulesKeys = $rules['report1']; break;
}

foreach($rules as $k=>$rule){
// dump_source($rulesKeys); // тут всё ок ключ => ключ с массива
// dump_source($rule); // // тут всё ок ключ => ключ с массива

if(in_array($rule, $rulesKeys)){
// тут форич ругается что аргумент ему плохой подаю
dump_source(implode(',', $rule));
}
}

Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.