У меня есть многомерный массив, и пытаюсь сгруппировать их согласно значению в определенном столбце.
Я пытаюсь сгруппировать их level
, но я не буду на самом деле знать уровня заранее. Так, это не похоже, я могу поместить его в a for
цикл и говорит while $i < 7
, потому что я не буду знать это 7
максимальное значение для ключа уровня, и откровенно говоря, я не уверен, что это - то, как я должен был бы сделать это, даже если бы я сделал...
Array (
[0] => Array (
[cust] => XT8900
[type] => standard
[level] => 1
)
[1] => Array (
[cust] => XT8944
[type] => standard
[level] => 1
)
[2] => Array (
[cust] => XT8922
[type] => premier
[level] => 3
)
[3] => Array (
[cust] => XT8816
[type] => permier
[level] => 3
)
[4] => Array (
[cust] => XT7434
[type] => standard
[level] => 7
)
)
Что я надеюсь произвести:
Array (
[1] => Array (
[0] => Array (
[cust] => XT8900
[type] => standard
)
[1] => Array (
[cust] => XT8944
[type] => standard
)
)
[3] => Array (
[2] => Array (
[cust] => XT8922
[type] => premier
)
[3] => Array (
[cust] => XT8816
[type] => permier
)
)
[7] => Array (
[4] => Array (
[cust] => XT7434
[type] => standard
)
)
)
Сначала нужно сгруппировать их по уровню
Используйте foreach, чтобы зациклиться в массиве и проверить, совпадает ли уровень с предыдущим элементом, а затем сгруппировать его с этим массивом
$templevel=0;
$newkey=0;
$grouparr[$templevel]="";
foreach ($items as $key => $val) {
if ($templevel==$val['level']){
$grouparr[$templevel][$newkey]=$val;
} else {
$grouparr[$val['level']][$newkey]=$val;
}
$newkey++;
}
print($grouparr);
Вывод print($grouparr); будет отображаться так, как вы надеялись
Вы также можете попробовать
print($grouparr[7]);
Will display
[7] => Array (
[4] => Array (
[cust] => XT7434
[type] => standard
)
)
Or
print($grouparr[3]);
Will display
[3] => Array (
[2] => Array (
[cust] => XT8922
[type] => premier
)
[3] => Array (
[cust] => XT8816
[type] => permier
)
)
Лучший способ, если у вас есть контроль над построением исходного массива, - просто настроить такие вещи в начале, когда вы добавляете записи.
Если нет, то создайте временный массив для сортировки:
foreach ($input_arr as $key => &$entry) {
$level_arr[$entry['level']][$key] = $entry;
}
Оставляет вам желаемую форму и все ссылки вместе.
Постройте такой массив в первую очередь, если это вообще возможно.