Как сгруппировать многомерный массив конкретным значением подмассива?

У меня есть многомерный массив, и пытаюсь сгруппировать их согласно значению в определенном столбце.

Я пытаюсь сгруппировать их 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
                 )
          )
)
28
задан mickmackusa 24 August 2018 в 03:29
поделиться

2 ответа

Сначала нужно сгруппировать их по уровню

Используйте 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
             )
      )
10
ответ дан 28 November 2019 в 03:00
поделиться

Лучший способ, если у вас есть контроль над построением исходного массива, - просто настроить такие вещи в начале, когда вы добавляете записи.

Если нет, то создайте временный массив для сортировки:

foreach ($input_arr as $key => &$entry) {
    $level_arr[$entry['level']][$key] = $entry;
}

Оставляет вам желаемую форму и все ссылки вместе.

Постройте такой массив в первую очередь, если это вообще возможно.

39
ответ дан 28 November 2019 в 03:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: