基本上,我想转换下面的多维数组:
Array
(
[0] => Array
(
[0] => foo
[1] => bar
[2] => hello
)
[1] => Array
(
[0] => world
[1] => love
)
[2] => Array
(
[0] => stack
[1] => overflow
[2] => yep
[3] => man
)
)
进入这个:
Array
(
[0] => foo
[1] => world
[2] => stack
[3] => bar
[4] => love
[5] => overflow
[6] => hello
[7] => yep
[8] => man
)
答案 0 :(得分:1)
所以我有几杯啤酒,我会稍后尝试收紧它,但这对整数索引数组起了作用:
$result = array();
for($i=0; $c=array_column($array, $i); $i++) {
$result = array_merge($result, $c);
}
print_r($result);
答案 1 :(得分:0)
有一个经常被忽视的迭代器可以帮助你:MultipleIterator。
我创建了一些演示代码:https://3v4l.org/beOMV
<?php
$arr = [
0 => [
0 => 'foo',
1 => 'bar',
2 => 'hello',
],
1 => [
0 => 'world',
1 => 'love',
],
2 => [
0 => 'stack',
1 => 'overflow',
2 => 'yep',
3 => 'man',
]
];
$parallelIterator = new MultipleIterator(MultipleIterator::MIT_NEED_ANY|MultipleIterator::MIT_KEYS_NUMERIC);
$parallelIterator->attachIterator(new ArrayIterator($arr[0]));
$parallelIterator->attachIterator(new ArrayIterator($arr[1]));
$parallelIterator->attachIterator(new ArrayIterator($arr[2]));
$result = [];
foreach ($parallelIterator as $values) {
foreach ($values as $value) {
if ($value !== null) {
$result[] = $value;
}
}
}
var_dump($result);
本质上,遍历MultipleIterator将为您提供一个数组,其中包含并行的所有附加迭代器的所有第一个条目(然后是第二个,依此类推)。通过使用MultipleIterator::MIT_NEED_ANY
或MultipleIterator::MIT_NEED_ALL
,您可以确定循环应该在最后一个迭代器没有更多元素时停止,或者在第一个迭代器用完元素时停止。当你运行到最后一个迭代器的最后一个元素时,你会得到NULL。
当附加迭代器时,你也可以添加一个在迭代时将在数组中使用的键,并且必须使用MultipleIterator::MIT_KEYS_ASSOC
- 我在这里只使用数字索引,因为特定数组的源不是很有趣
结果是
array(9) {
[0]=> string(3) "foo"
[1]=> string(5) "world"
[2]=> string(5) "stack"
[3]=> string(3) "bar"
[4]=> string(4) "love"
[5]=> string(8) "overflow"
[6]=> string(5) "hello"
[7]=> string(3) "yep"
[8]=> string(3) "man"
}
是的,如果需要,可以在将子数组附加到MultipleIterator时迭代该初始数组:
foreach ($arr as $innerArr) {
$parallelIterator->attachIterator(new ArrayIterator($innerArr));
}