所有
你将如何" un-nest"一个数组,使其更容易循环?
你如何转换下面的数组...
Array
(
[0] => Array
(
[0] => Array
(
[key1] => data1
[key2] => data2
[key3] => data3
)
)
[1] => Array
(
[0] => Array
(
[key1] => data4
[key2] => data5
[key3] => data6
)
)
)
对于像这样可管理的东西......?
Array
(
[0] => Array {
[key1] => data1
[key2] => data2
[key3] => data3
}
[1] => Array (
[key1] => data4
[key2] => data5
[key3] => data6
)
)
答案 0 :(得分:7)
是的,有!
$newArray = array_map('end', $oldArray);
此代码仅将end
应用于源数组的每个元素,并将结果收集到新数组中。例如,如果这样的元素是
Array
(
[0] => Array
(
[key1] => data1
[key2] => data2
[key3] => data3
)
)
end
的结果将是
Array
(
[key1] => data1
[key2] => data2
[key3] => data3
)
基本上end
“展开”内部数组,从而摆脱一个嵌套级别。由于始终只有一个子阵列,因此您也可以使用current
或reset
具有相同的效果。
答案 1 :(得分:0)
接受的答案适用于测试用例,但以下几乎适用于(?)任何数组:
$newArray = array_reduce($oldArray, 'array_merge', []));
这从第一个值和[]
开始运行array_merge
,然后是第二个值和第一个array_merge
的结果,依此类推,直到返回合并携带的结果值和最终值。这具有展开 1 层的效果。
示例:
$a = [ [ [ 'key1' => 'data1' ], [ 'key1' => 'data2' ] ], [ [ 'key1' => 'data3' ] ] ];
$a = array_reduce($a, 'array_merge', []);
print_r($a);
// output:
Array
(
[0] => Array
(
[key1] => data1
)
[1] => Array
(
[key1] => data2
)
[2] => Array
(
[key1] => data3
)
)