代码之家  ›  专栏  ›  技术社区  ›  gadss

php按字分组多维数组

  •  -1
  • gadss  · 技术社区  · 6 年前

    我用php编写了这种数组。

    $array[] = ["name"=>"KIT", "v1"=>"val1", "v2"=>"val2", "v3"=>"val3"]; 
    $array[] = ["name"=>"BAT", "v1"=>"val1", "v2"=>"val2", "v3"=>"val3"]; 
    $array[] = ["name"=>"ISL", "v1"=>"val1", "v2"=>"val1", "v3"=>"val1"]; 
    $array[] = ["name"=>"KIT", "v1"=>"val4", "v2"=>"val2", "v3"=>"val2"]; 
    $array[] = ["name"=>"BAT", "v1"=>"val1", "v2"=>"val2", "v3"=>"val1"]; 
    $array[] = ["name"=>"ENS", "v1"=>"val1", "v2"=>"val2", "v3"=>"val3"]; 
    $array[] = ["name"=>"ENS", "v1"=>"val3", "v2"=>"val2", "v3"=>"val1"]; 
    

    我想把它们分组,这样输出

    BAT val1 val2 val3
        val1 val2 val1
    ENS val1 val2 val3
        val3 val2 val1
    ISL val1 val1 val1
    KIT val1 val2 val3
        val4 val2 val2
    

    我试着 ksort() 但不起作用:

    $group_arr = [];
        foreach ($array as $key => $value) {
            $group_arr[$value["name"]][$key] = $value;
        }
    
    2 回复  |  直到 6 年前
        1
  •  1
  •   dWinder Dharman    6 年前

    你应该尝试:

    foreach ($array as $value) {
        $v = $value;
        unset($v['name']);
        $group_arr[$value["name"]][] = $v;
    }
    

    无用 ksort 是需要的。注意钥匙 $array 只是整数,结果数组中不需要它们

        2
  •  0
  •   Andreas    6 年前

    你需要做一个嵌套循环。
    为了不在新数组中添加名称,我提取它并使用array_slice在嵌套foreach中不获取它。

    foreach ($array as $value) {
        $name = $value["name"];
        foreach(array_slice($value,1) as $val){
            $group_arr[$name][] = $val;
        }
    }
    var_dump($group_arr);
    

    输出:

    array(4) {
      ["KIT"]=>
      array(6) {
        [0]=>
        string(4) "val1"
        [1]=>
        string(4) "val2"
        [2]=>
        string(4) "val3"
        [3]=>
        string(4) "val4"
        [4]=>
        string(4) "val2"
        [5]=>
        string(4) "val2"
      }
      ["BAT"]=>
      array(6) {
        [0]=>
        string(4) "val1"
        [1]=>
        string(4) "val2"
        [2]=>
        string(4) "val3"
        [3]=>
        string(4) "val1"
        [4]=>
        string(4) "val2"
        [5]=>
        string(4) "val1"
      }
      ["ISL"]=>
      array(3) {
        [0]=>
        string(4) "val1"
        [1]=>
        string(4) "val1"
        [2]=>
        string(4) "val1"
      }
      ["ENS"]=>
      array(6) {
        [0]=>
        string(4) "val1"
        [1]=>
        string(4) "val2"
        [2]=>
        string(4) "val3"
        [3]=>
        string(4) "val3"
        [4]=>
        string(4) "val2"
        [5]=>
        string(4) "val1"
      }
    }
    

    https://3v4l.org/ebuFt