如何通过多个子数组值对多维数组进行分组?

时间:2020-07-23 08:33:18

标签: php arrays multidimensional-array grouping

我检查了这个问题并回答:

How to group a multidimensional array by a particular subarray value?

他想按“级别”对结果进行分组。但是如何将其按“级别”然后按“类型”分组呢?

1 个答案:

答案 0 :(得分:0)

非常简单。遍历$ items数组。获取每个项目的级别和类型,如果尚未设置,请使用一个空数组对其进行初始化。然后只需将“ cust”值推入数组即可。

我已经给出了下面的代码。

我假设“ $ items”是一个包含输入的数组。

$g = [];

foreach($items as $k => $v) {
    $l = $v["level"];
    $t = $v["type"];
    $c = $v["cust"];

    if(!isset($g[$l])) {
        $g[$l] = [];
    }
    if(!isset($g[$l][$t])) {
        $g[$l][$t] = [];
    }

    $g[$l][$t][] = [
        "cust" => $c
    ];
}

var_dump($g);

此代码的输出如下:

array(3) {
  [1]=>
  array(1) {
    ["standard"]=>
    array(2) {
      [0]=>
      array(1) {
        ["cust"]=>
        string(6) "XT8900"
      }
      [1]=>
      array(1) {
        ["cust"]=>
        string(6) "XT8944"
      }
    }
  }
  [3]=>
  array(1) {
    ["premier"]=>
    array(2) {
      [0]=>
      array(1) {
        ["cust"]=>
        string(6) "XT8922"
      }
      [1]=>
      array(1) {
        ["cust"]=>
        string(6) "XT8816"
      }
    }
  }
  [7]=>
  array(1) {
    ["standard"]=>
    array(1) {
      [0]=>
      array(1) {
        ["cust"]=>
        string(6) "XT7434"
      }
    }
  }
}

[P.S。]:您也可以使用sort轻松解决此问题。那是解决这个问题的另一种方式。