首页 > 解决方案 > 如何使用 PHP array_walk 函数重新排列多维数组中的键?

问题描述

我有一个以下格式的 PHP 数组:

array (size=2)
  '2019-09-28' => 
    array (size=2)
      'A' => float 4
      'B' => float 85
      'C' => float 200
  '2019-09-29' => 
    array (size=2)
      'A' => float 5
      'B' => float 83
      'C' => float 202

我正在尝试使用 PHP 中的 array_walk() 函数来重新排列数组键,如下所示:

array (size=3)
  'A' => 
    array (size=2)
      '2019-09-28' => float 4
      '2019-09-29' => float 5
  'B' => 
    array (size=2)
      '2019-09-28' => float 85
      '2019-09-29' => float 83
  'C' => 
    array (size=2)
      '2019-09-28' => float 200
      '2019-09-29' => float 202

我正在使用以下代码来执行此操作:

$result_arr = [];   
array_walk($myArray,function($v,$k) use (&$result_arr){
  $result_arr[key($v)][$k] = $v[key($v)];
});

但是我目前使用的这段代码只产生第一个项目 A,并且不产生以下项目 B 和 CIe 我希望得到完整的输出,但只收到第一个项目,如下所示:

array (size=1)
 'A' => 
   array (size=2)
    '2019-09-28' => float 4
    '2019-09-29' => float 5

请帮忙。我错过了什么?

标签: phparraysarray-walk

解决方案


你也需要在forach()那里申请:

$result_arr = [];   
array_walk($myArray,function($value,$key) use (&$result_arr){
    foreach($value as $k=> $val){ //$value is an array, so iterate over it
         $result_arr[$k][$key] = $val;
    }

});

print_r($result_arr);

输出:https ://3v4l.org/fJJhm


推荐阅读