如何在PHP中分解数组多维

如何在PHP中分解数组多维,php,arrays,Php,Arrays,我在如下详述数组编号时遇到问题 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

我在如下详述数组编号时遇到问题

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)
如果最终结果如下,我该怎么办

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)
字符串
['kali']
循环次数与前一个数组相同

例如:
['kali']=2
循环2次
['kali']=5
循环5次 等等


请说明此案例

您可以使用
array\u 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]; 
  }
}); 
$arr=[
['um'=>1000,'kali'=>2'],
[um'=>2000,'kali'=>5'],
['um'=>5000,'kali'=>1']
];
$res=[];
数组_walk($arr,function($v,$k)use(&$res){
$condition=($v['kali']==5)?4:($v['kali']);
对于($i=1;$i$v['um'],'kali'=>count($res)+1];
}
}); 

您可以使用
array\u 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]; 
  }
}); 
$arr=[
['um'=>1000,'kali'=>2'],
[um'=>2000,'kali'=>5'],
['um'=>5000,'kali'=>1']
];
$res=[];
数组_walk($arr,function($v,$k)use(&$res){
$condition=($v['kali']==5)?4:($v['kali']);
对于($i=1;$i$v['um'],'kali'=>count($res)+1];
}
}); 

简单的
foreach
循环可以执行以下操作:

$cnt = 1;
foreach($arr as $e) {
    for($i = 0; $i < $e["kali"]; $i++)
        $res[] = array('um' => $e['um'], 'kali' => $cnt++);
}
$cnt=1;
外汇($arr作为$e){
对于($i=0;$i<$e[“kali”];$i++)
$res[]=array('um'=>$e['um'],'kali'=>$cnt++);
}

活生生的例子:

简单的
foreach
循环可以这样做:

$cnt = 1;
foreach($arr as $e) {
    for($i = 0; $i < $e["kali"]; $i++)
        $res[] = array('um' => $e['um'], 'kali' => $cnt++);
}
$cnt=1;
外汇($arr作为$e){
对于($i=0;$i<$e[“kali”];$i++)
$res[]=array('um'=>$e['um'],'kali'=>$cnt++);
}

活生生的例子:

为什么你的输出中只有四个um=>2000。它不是应该是5吗?哦,是的。它应该是5,tks:dwy为什么你的输出中只有四个um=>2000。它不是应该是5吗?哦,是的。它应该是5,tks:I相信这是OPs端的一个输入错误,但是你的数组有八个项,OPs有七个。@Andreas-我也看到了(注意到你的评论)但是我猜(正如你)这个错误是他的是的,我对那个样本的错误是5,对于um=2000,我很抱歉,我相信这是OPs端的一个错误,但是你的数组有8个项目,OPs有7个。@Andreas-我也看到了(注意到你的评论),但是我猜(正如你)这个错误是他的是的,我对那个样本的错误是5,对于um=2000,我很抱歉