0

I've been confused for hours doing this. so, I have this array

$data = array(
    array(
        'base_id' => 14,
        'offset' => 1,
        'name' => 'rental',
        'value' => 200
    ),
    array(
        'base_id' => 14,
        'offset' => 1,
        'name' => 'tax',
        'value' => 20
    ),
    array(
        'base_id' => 14,
        'offset' => 1,
        'name' => 'misc',
        'value' => 10
    ),
    array(
        'base_id' => 13,
        'offset' => 5,
        'name' => 'rental',
        'value' => 150
    ),
    array(
        'base_id' => 13,
        'offset' => 5,
        'name' => 'tax',
        'value' => 15
    ),
    array(
        'base_id' => 13,
        'offset' => 5,
        'name' => 'misc',
        'value' => 5
    ),
    array(
        'base_id' => 13,
        'offset' => 7,
        'name' => 'rental',
        'value' => 170
    )
);

and i want to group them by base_id and offset so becoming like this

$result = array(
    array(
        array(
            'base_id' => 14,
            'offset' => 1,
            'name' => 'rental',
            'value' => 200
        ),
        array(
            'base_id' => 14,
            'offset' => 1,
            'name' => 'tax',
            'value' => 20
        ),
        array(
            'base_id' => 14,
            'offset' => 1,
            'name' => 'misc',
            'value' => 10
        ),
    ),
    array(
        array(
            'base_id' => 13,
            'offset' => 5,
            'name' => 'rental',
            'value' => 150
        ),
        array(
            'base_id' => 13,
            'offset' => 5,
            'name' => 'tax',
            'value' => 15
        ),
        array(
            'base_id' => 13,
            'offset' => 5,
            'name' => 'misc',
            'value' => 5
        ),
    ),
    array(
        array(
            'base_id' => 13,
            'offset' => 7,
            'name' => 'rental',
            'value' => 170
        )
    )
);

how to achieve that? any function in php to do that, or just using loop. need your help, thanks.

Fatimah Wulandari
  • 307
  • 2
  • 5
  • 16

5 Answers5

0

Iterate your data and check wether base_id is 13 or 14.

$_14_result = array();
$_13_result = array();
foreach($data as $key=> $d){
    if($d["base_id"] == 14)
        $_14_result[] = $d;
    else 
        $_13_result[] = $d; 

}

merge base_id 13, 14 result into array

$result[] = $_14_result;
$result[] = $_13_result;
print_r($result);
Prashant Srivastav
  • 1,723
  • 17
  • 28
0

there is no php function which do this job, but i provided an script for this porpuse:

$refrenceArray = array();
$outputArray = array();
$refrenceIndex = 0;
foreach($data as $key=>$value)
{
     if(!isset($refrenceArray[$value['base_id']]))
     {
          $refrenceArray[$value['base_id']] = $refrenceIndex;
          $refrenceIndex++;
     }
     $outputArray[$refrenceArray[$value['base_id']]][] = $value;
}
Majid Abbasi
  • 1,531
  • 3
  • 12
  • 22
0

The solution is,

  • First use a foreach loop to group all the arrays based on base_id and offset key.
  • Then apply the callback function array_merge() to the resultant array.

So your code should be like this:

// Suppose $data is your original array

$result_array = array();
foreach($data as $arr){
    $result_array[$arr['base_id']][$arr['offset']][] = $arr;
}
$result_array = call_user_func_array('array_merge', $result_array);

// display $result_array
echo '<pre>';
print_r($result_array);
echo '</pre>';

Here's the Live Demo

Rajdeep Paul
  • 16,887
  • 3
  • 18
  • 37
0

Try this -

<?php
$data = array(
    array(
        'base_id' => 14,
        'offset' => 1,
        'name' => 'rental',
        'value' => 200
    ),
    array(
        'base_id' => 14,
        'offset' => 1,
        'name' => 'tax',
        'value' => 20
    ),
    array(
        'base_id' => 14,
        'offset' => 1,
        'name' => 'misc',
        'value' => 10
    ),
    array(
        'base_id' => 13,
        'offset' => 5,
        'name' => 'rental',
        'value' => 150
    ),
    array(
        'base_id' => 13,
        'offset' => 5,
        'name' => 'tax',
        'value' => 15
    ),
    array(
        'base_id' => 13,
        'offset' => 5,
        'name' => 'misc',
        'value' => 5
    ),
    array(
        'base_id' => 13,
        'offset' => 7,
        'name' => 'rental',
        'value' => 170
    )
);

foreach($data as $key=>$val){
  $myArr[$val['base_id']][$val['offset']][] = $val;
}

echo '<pre>'; print_r($myArr);
?>
Afshan Shujat
  • 541
  • 4
  • 9
0

try this

<?php

$data = array(
array(
    'base_id' => 14,
    'offset' => 1,
    'name' => 'rental',
    'value' => 200
),
array(
    'base_id' => 14,
    'offset' => 1,
    'name' => 'tax',
    'value' => 20
),
array(
    'base_id' => 14,
    'offset' => 1,
    'name' => 'misc',
    'value' => 10
),
array(
    'base_id' => 13,
    'offset' => 5,
    'name' => 'rental',
    'value' => 150
),
array(
    'base_id' => 13,
    'offset' => 5,
    'name' => 'tax',
    'value' => 15
),
array(
    'base_id' => 13,
    'offset' => 5,
    'name' => 'misc',
     'value' => 5
     ),
   array(
    'base_id' => 13,
    'offset' => 7,
    'name' => 'rental',
    'value' => 170
    )
    );



  foreach($data as $key=>$val){
 $myArr[$val['base_id'].'_'.$val['offset']][] = $val;
 }

  echo '<pre>'; print_r($myArr);

 ?>
JYoThI
  • 11,977
  • 1
  • 11
  • 26