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


how to split a 2D array into array chunks on the basis of a index value in PHP

我有一个包含产品ID,产品名称和公司ID的2D数组,现在我想使一组公司具有产品信息,并且可以将产品详细信息邮寄给公司,我在数组中有类似

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

我想在company_id的基础上制作数组块,因此最终数组应该是 3-D 数组,输出应该是这样的

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

宗旨是把集团当成公司。

试试这个:

最简单的方法:

  $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>";
?>

遍历数组。

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

检查密钥是否company_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()
$groupBycompany = [];    
if ($companies) {
          foreach ($companies as $keys => $values) {
            if (isset($values['company_id'])){
                   $groupByCompany[$values['company_id']][] = $values;
            }
          }
    }