如何按特定的子数组值对多维数组进行分组?

我有一个多维数组,并尝试根据特定列中的值对它们进行分组。

我试图按 分组,但我实际上事先并不知道级别。所以,这并不是说我可以把它放在一个循环中并说,因为我不知道这是级别键的最大值,坦率地说,我不确定即使我这样做,我也不会这样做......levelforwhile $i < 77

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
                 )
          )
)

答案 1

如果您能够控制初始数组的构建,最好的方法是在添加条目时在开始时进行这样的设置。

如果没有,则构建一个临时数组进行排序:

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

留下您想要的形式和引用的所有内容。

如果可能的话,首先就像这样构建数组。


答案 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]);

将显示

 [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
             )
      )