全部,
如何"取消嵌套"数组以使其更容易循环?
你将如何转换下面的数组。。。
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
)
)
是的,有!
$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
。
接受的答案适用于测试用例,但以下几乎适用于(?)任何数组:
$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
)
)