如何将一级键与其二级值合并并删除所有关联键?
How to merge first level keys with their second level values and remove all associative keys?
我有这样的数组:
Array (
[2018-03-12] => Array (
[United States] => 4
[Australia] => 15
[United Kingdom] => 0
[New Zealand] => 0
)
[2018-03-13] => Array (
[United States] => 0
[Australia] => 8
[United Kingdom] => 2
[New Zealand] => 0
)
)
我想制作这样的数组:
[
["2018-03-12", 4, 15, 0, 0],
["2018-03-13", 0, 8, 0, 2]
]
如何做到这一点?
尝试:
$arr = [
'2018-03-12' => [
'United States' => 4,
'Australia' => 15,
'United Kingdom' => 0,
'New Zealand' => 0,
],
'2018-03-13' => [
'United States' => 0,
'Australia' => 8,
'United Kingdom' => 2,
'New Zealand' => 0,
]
];
return array_map(function ($item, $key) {
return array_merge([$key], array_values($item));
},$arr, array_keys($arr));
您只需要迭代每个顶级元素,然后 merge/store 作为元素的键和子数组值。
代码:(Demo)
$array = [
'2018-03-12' => [
'United States' => 4,
'Australia' => 15,
'United Kingdom' => 0,
'New Zealand' => 0,
],
'2018-03-13' => [
'United States' => 0,
'Australia' => 8,
'United Kingdom' => 2,
'New Zealand' => 0,
]
];
foreach ($array as $key => $subarray) {
$result[] = array_merge([$key], array_values($subarray));
}
var_export($result);
输出:
array (
0 =>
array (
0 => '2018-03-12',
1 => 4,
2 => 15,
3 => 0,
4 => 0,
),
1 =>
array (
0 => '2018-03-13',
1 => 0,
2 => 8,
3 => 2,
4 => 0,
),
)
或者您可以将键取消移位到子数组中并重新索引两个级别。
foreach ($array as $key => $subarray) {
array_unshift($subarray, $key);
$result[] = array_values($subarray);
}
或者您可以使用联合运算符将键与子数组元素合并,然后重新索引。
foreach ($array as $key => $subarray) {
$result[] = array_values([$key] + $subarray);
}
如果您的 php 版本允许可变参数,您甚至可以将子数组解压缩到 array_push 调用中。
foreach ($array as $key => $subarray) {
$temp = [];
array_push($temp, $key, ...array_values($subarray));
$result[] = $temp;
}
我有这样的数组:
Array (
[2018-03-12] => Array (
[United States] => 4
[Australia] => 15
[United Kingdom] => 0
[New Zealand] => 0
)
[2018-03-13] => Array (
[United States] => 0
[Australia] => 8
[United Kingdom] => 2
[New Zealand] => 0
)
)
我想制作这样的数组:
[
["2018-03-12", 4, 15, 0, 0],
["2018-03-13", 0, 8, 0, 2]
]
如何做到这一点?
尝试:
$arr = [
'2018-03-12' => [
'United States' => 4,
'Australia' => 15,
'United Kingdom' => 0,
'New Zealand' => 0,
],
'2018-03-13' => [
'United States' => 0,
'Australia' => 8,
'United Kingdom' => 2,
'New Zealand' => 0,
]
];
return array_map(function ($item, $key) {
return array_merge([$key], array_values($item));
},$arr, array_keys($arr));
您只需要迭代每个顶级元素,然后 merge/store 作为元素的键和子数组值。
代码:(Demo)
$array = [
'2018-03-12' => [
'United States' => 4,
'Australia' => 15,
'United Kingdom' => 0,
'New Zealand' => 0,
],
'2018-03-13' => [
'United States' => 0,
'Australia' => 8,
'United Kingdom' => 2,
'New Zealand' => 0,
]
];
foreach ($array as $key => $subarray) {
$result[] = array_merge([$key], array_values($subarray));
}
var_export($result);
输出:
array (
0 =>
array (
0 => '2018-03-12',
1 => 4,
2 => 15,
3 => 0,
4 => 0,
),
1 =>
array (
0 => '2018-03-13',
1 => 0,
2 => 8,
3 => 2,
4 => 0,
),
)
或者您可以将键取消移位到子数组中并重新索引两个级别。
foreach ($array as $key => $subarray) {
array_unshift($subarray, $key);
$result[] = array_values($subarray);
}
或者您可以使用联合运算符将键与子数组元素合并,然后重新索引。
foreach ($array as $key => $subarray) {
$result[] = array_values([$key] + $subarray);
}
如果您的 php 版本允许可变参数,您甚至可以将子数组解压缩到 array_push 调用中。
foreach ($array as $key => $subarray) {
$temp = [];
array_push($temp, $key, ...array_values($subarray));
$result[] = $temp;
}