Erka Ricki
Erka Ricki

Reputation: 15

How to breakdown an array multidimension in PHP

I have a problem in detailing array numbers as below

array (size=3)
  0 => 
    array (size=2)
      'um' => float 1000
      'kali' => string '2' (length=1)
  1 => 
    array (size=2)
      'um' => float 2000
      'kali' => string '5' (length=2)
  2 => 
    array (size=2)
      'um' => float 5000
      'kali' => string '1' (length=1)

What should i do if the end result is as follows

array (size=7)
  0 => 
    array (size=2)
      'um' => float 1000
      'kali' => string '1' (length=1)
  1 => 
    array (size=2)
      'um' => float 1000
      'kali' => string '2' (length=1)
  2 => 
    array (size=2)
      'um' => float 2000
      'kali' => string '3' (length=1)
  3 => 
    array (size=2)
      'um' => float 2000
      'kali' => string '4' (length=1)
  4 => 
    array (size=2)
      'um' => float 2000
      'kali' => string '5' (length=1)
  5 => 
    array (size=2)
      'um' => float 2000
      'kali' => string '6' (length=1)
  6 => 
    array (size=2)
      'um' => float 2000
      'kali' => string '7' (length=1)
  7 => 
    array (size=2)
      'um' => float 5000
      'kali' => string '8' (length=1)

String ['kali'] loop as much as the previous array

for example: ['kali'] = 2 looping 2 times ['kali'] = 5 looping 5 times etc..

Please enlighten this case

Upvotes: 0

Views: 34

Answers (2)

Rakesh Jakhar
Rakesh Jakhar

Reputation: 6388

You can approach this using array_walk

$arr = [
  ['um' => 1000, 'kali' => '2'],
  ['um' => 2000, 'kali' => '5'],
  ['um' => 5000, 'kali' => '1']
];
$res = [];
array_walk($arr, function($v, $k) use (&$res){
  $condition = ($v['kali'] == 5) ? 4 : ($v['kali']);
  for($i=1;$i <= $condition;$i++){
    $res[] = ['um' => $v['um'], 'kali' => count($res)+1]; 
  }
}); 

DEMO

Upvotes: 1

dWinder
dWinder

Reputation: 11642

Simple foreach loop may do it as:

$cnt = 1;
foreach($arr as $e) {
    for($i = 0; $i < $e["kali"]; $i++)
        $res[] = array('um' => $e['um'], 'kali' => $cnt++);
}

Live example: 3v4l

Upvotes: 1

Related Questions