Надеюсь, я могу это объяснить правильно …
У меня многомерный массив, и я пытаюсь сгруппировать их по значению одного из ключей.
Итак, я пытаюсь сгруппировать их по уровню, но я не буду знать уровень заранее. Итак, я не могу поместить его в цикл for и сказать, пока $ 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);
Проточите$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);
Проточите$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);
Проточите$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);
Проточите$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);
Результат печати ($ grouparr); будет отображаться как формат, на который вы надеялись
Вы также можете попробовать
print($grouparr[7]);
Отобразится
[7] => Array ( [4] => Array ( [cust] => XT7434 [type] => standard ) )
Или
print($grouparr[3]);
Отобразится
[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; }
Оставляет вам форму, которую вы хотели, и все ссылалось вместе.
Постройте массив, как это, в первую очередь, хотя, если это вообще возможно.
function group_assoc($array, $key) { $return = array(); foreach($array as $v) { $return[$v[$key]][] = $v; } return $return; } //Group the requests by their account_id $account_requests = group_assoc($requests, 'account_id');
Вот решение, на которое я приземлился на идентичную проблему, завернутый как функция:
function arraySort($input,$sortkey){ foreach ($input as $key=>$val) $output[$val[$sortkey]][]=$val; return $output; }
Чтобы отсортировать $ myarray с помощью ключа с именем «level», просто выполните следующее:
$myArray = arraySort($myArray,'level');
Или, если вы не хотите, чтобы это функция, просто для использования в одно время, это создало бы $ myNewArray из $ myArray, сгруппированного по ключу 'level'
foreach ($myArray as $key=>$val) $myNewArray[$val['level']][]=$val;
$result = array(); foreach ($yourArrayList as $data) { $id = $data['level']; if (isset($result[$id])) { $result[$id][] = $data; } else { $result[$id] = array($data); } }
function _group_by($array,$key,$keyName) { $return = array(); foreach($array as $val) { $return[$keyName.$val[$key]][] = $val; } return $return; } //end of function