Aniket Singh
Aniket Singh

Reputation: 2634

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

I have a 2D-array which contains product id, product name and company id, now i want to make group of company having product information and can mail to company with product details, i have data in array like

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
    )

)

And i want to make array chunks on the basis of company_id thus final array should be 3-d array and output should like this

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

)

aim is to make group as for company.

Upvotes: 1

Views: 200

Answers (3)

tnchalise
tnchalise

Reputation: 1583

$groupBycompany = [];    
if ($companies) {
          foreach ($companies as $keys => $values) {
            if (isset($values['company_id'])){
                   $groupByCompany[$values['company_id']][] = $values;
            }
          }
    }

Upvotes: 0

Suchit kumar
Suchit kumar

Reputation: 11859

try this:

the easiest way:

  $newarray = array();
    foreach($array as $values) {
        $newarray[$values['company_id']][] = $values;
    }
    $newarray = array_values($newarray); 

another way:

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

Upvotes: 3

Pupil
Pupil

Reputation: 23958

Loop through the array.

Here, you get second dimension arrays consisting of third level (our expected arrays).

Check if the key is company_id and append to a new array we have created before the loop.

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

Upvotes: 0

Related Questions