如何使用 PHP array_walk 函数重新排列多维数组中的键?
How do I use the PHP array_walk function to rearrange keys in a multidimensional array?
我有一个 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 和 C。即我期待完整的输出,但只收到如下第一项:
array (size=1)
'A' =>
array (size=2)
'2019-09-28' => float 4
'2019-09-29' => float 5
请帮忙。我错过了什么?
你也需要申请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);
foreach
解,fiddlehere:
$array = [
'2019-09-28' => [
'A' => 4,
'B' => 85,
'C' => 200,
],
'2019-09-29' => [
'A' => 5,
'B' => 83,
'C' => 202,
]
];
$res = [];
foreach ($array as $key => $item) {
foreach ($item as $itemKey => $itemValue) {
$res[$itemKey][$key] = $itemValue;
}
}
print_r($res);
你可以这样处理
array_walk($a, function($v,$k) use (&$r){
array_walk($v,function($v1,$k1) use (&$r,$k){
$r[$k1][$k] = $v1;
});
});
print_r($r);
我认为array_walk would be best used for modifying values in an array instead of messing with the array's structure. I'd personally use array_reduce聚合给定数组的信息以形成另一个结构完全不同的数组(即您的用例)
<?php
$array = [
'2019-09-28' => [
'A' => (float) 4,
'B' => (float) 85,
'C' => (float) 200,
],
'2019-09-29' => [
'A' => (float) 5,
'B' => (float) 83,
'C' => (float) 202,
],
];
$result = array_reduce(array_keys($array), function ($result, $date) use ($array) {
return array_reduce(array_keys($array[$date]), function ($result, $key) use ($array, $date) {
$result[$key][$date] = $array[$date][$key];
return $result;
}, $result);
}, []);
var_dump($result);
在PHP Sandbox中展示。
我有一个 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 和 C。即我期待完整的输出,但只收到如下第一项:
array (size=1)
'A' =>
array (size=2)
'2019-09-28' => float 4
'2019-09-29' => float 5
请帮忙。我错过了什么?
你也需要申请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);
foreach
解,fiddlehere:
$array = [
'2019-09-28' => [
'A' => 4,
'B' => 85,
'C' => 200,
],
'2019-09-29' => [
'A' => 5,
'B' => 83,
'C' => 202,
]
];
$res = [];
foreach ($array as $key => $item) {
foreach ($item as $itemKey => $itemValue) {
$res[$itemKey][$key] = $itemValue;
}
}
print_r($res);
你可以这样处理
array_walk($a, function($v,$k) use (&$r){
array_walk($v,function($v1,$k1) use (&$r,$k){
$r[$k1][$k] = $v1;
});
});
print_r($r);
我认为array_walk would be best used for modifying values in an array instead of messing with the array's structure. I'd personally use array_reduce聚合给定数组的信息以形成另一个结构完全不同的数组(即您的用例)
<?php
$array = [
'2019-09-28' => [
'A' => (float) 4,
'B' => (float) 85,
'C' => (float) 200,
],
'2019-09-29' => [
'A' => (float) 5,
'B' => (float) 83,
'C' => (float) 202,
],
];
$result = array_reduce(array_keys($array), function ($result, $date) use ($array) {
return array_reduce(array_keys($array[$date]), function ($result, $key) use ($array, $date) {
$result[$key][$date] = $array[$date][$key];
return $result;
}, $result);
}, []);
var_dump($result);
在PHP Sandbox中展示。