如何在PHP中根据索引值将2D数组拆分为数组块

如何在PHP中根据索引值将2D数组拆分为数组块,php,arrays,Php,Arrays,我有一个2D数组,其中包含产品id、产品名称和公司id,现在我想让一组公司拥有产品信息,并可以向公司发送产品详细信息,数组中的数据如下 Array ( [0] => Array ( [id] => 5363 [proname] => pro1 [company_id] => 101 ) [1] => Array ( [id] => 5364 [pronam

我有一个2D数组,其中包含产品id、产品名称和公司id,现在我想让一组公司拥有产品信息,并可以向公司发送产品详细信息,数组中的数据如下

Array
(
[0] => Array
    (
        [id] => 5363
        [proname] => pro1
        [company_id] => 101
    )

[1] => Array
    (
        [id] => 5364
        [proname] => pro2
        [company_id] => 105
    )

[2] => Array
    (
        [id] => 5366
        [proname] => pro3
        [company_id] => 102
    )

[3] => Array
    (
        [id] => 5367
        [proname] => pro4
        [company_id] => 101
    )

[4] => Array
    (
        [id] => 5368
        [proname] => pro5
        [company_id] => 105
    )

[5] => Array
    (
        [id] => 5369
        [proname] => pro6
        [company_id] => 105
    )

[6] => Array
    (
        [id] => 3847
        [proname] => pro7
        [company_id] => 102
    )

[7] => Array
    (
        [id] => 3849
        [proname] => pro8
        [company_id] => 105
    )

[8] => Array
    (
        [id] => 5371
        [proname] => pro9
        [company_id] => 101
    )

[9] => Array
    (
        [id] => 5383
        [proname] => pro10
        [company_id] => 102
    )

[10] => Array
    (
        [id] => 5385
        [proname] => pro11
        [company_id] => 105
    )

)
我想在公司id的基础上制作数组块,因此最终的数组应该是三维数组,输出应该是这样的

array(

   [0]=>Array(
        [0] => Array
            (
                [id] => 5363
                [proname] => pro1
                [company_id] => 101
            )

        [1] => Array
            (
                [id] => 5367
                [proname] => pro4
                [company_id] => 101
            )
        [2] => Array
            (
                [id] => 5371
                [proname] => pro9
                [company_id] => 101
            )

        )
    [1]=Array
        (
        [0] => Array
            (
                [id] => 5364
                [proname] => pro2
                [company_id] => 105
            )
        [1] => Array
            (
                [id] => 5368
                [proname] => pro5
                [company_id] => 105
            )
        [2] => Array
            (
                [id] => 5369
                [proname] => pro6
                [company_id] => 105
            )
        [3] => Array
            (
                [id] => 3849
                [proname] => pro8
                [company_id] => 105
            )
         [4] => Array
            (
                [id] => 5385
                [proname] => pro11
                [company_id] => 105
            )
        )

    [2]=Array(
         [0] => Array
            (
                [id] => 5366
                [proname] => pro3
                [company_id] => 102
            )
          [1] => Array
            (
                [id] => 3847
                [proname] => pro7
                [company_id] => 102
            )
        [2] => Array
            (
                [id] => 5383
                [proname] => pro10
                [company_id] => 102
            )
    )

)

目标是使组成为公司。

在数组中循环

在这里,您可以得到由第三级(我们预期的数组)组成的二维数组

检查键是否为
company\u id
,并附加到我们在循环之前创建的新数组中

$newArr = array();
foreach ($arr as $array) {
  foreach ($array as $k=>$v) {
    if ($k == 'company_id')  {
      $newArr[$k][] = $array;
    }
  }
}
print_r($newArr); // Your new array()
试试这个:

最简单的方法:

  $newarray = array();
    foreach($array as $values) {
        $newarray[$values['company_id']][] = $values;
    }
    $newarray = array_values($newarray); 
另一种方式:

<?php 
$newarray = array();

foreach($array as $key=>$val){// here $array is your given array.
if(isset($newarray[$val['company_id']])){
    array_push($newarray[$val['company_id']],$val);

}else{

    $newarray[$val['company_id']][0]=$val;
}

}
$newarray = array_values($newarray);
echo "<pre>";
print_r($newarray);
echo "</pre>";
?>


创建一个新容器,该容器将保存新值。使用公司id作为键来推送它这是一个很长的方法,有没有php函数的组合可以做到这一点?长方法是什么意思?你只需要一个循环和一行代码,就可以使用至少3行的键来分配任务。虽然你的代码可以解决op的问题,但你也应该解释你做了什么,为什么这是一个解决方案,op的方法/代码有什么问题。只有代码的答案可能会被删除(以及只有链接的答案)。由于其长度和内容,此答案被标记为低质量。请添加此代码如何解决问题的简单英语解释。
$groupBycompany = [];    
if ($companies) {
          foreach ($companies as $keys => $values) {
            if (isset($values['company_id'])){
                   $groupByCompany[$values['company_id']][] = $values;
            }
          }
    }