php从数组集中删除父级数组并合并节点
我对数组的操作很糟糕…鉴于这种结构,我想删除顶级数组并将所有子集合并到一个平面数组中:php从数组集中删除父级数组并合并节点,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我对数组的操作很糟糕…鉴于这种结构,我想删除顶级数组并将所有子集合并到一个平面数组中: Array ( [0] => Array ( [0] => Array ( [0] => hey.com ) [1] => Array (
Array
(
[0] => Array
(
[0] => Array
(
[0] => hey.com
)
[1] => Array
(
[0] => you.com
)
)
[1] => Array
(
[0] => Array
(
[0] => this.com
)
[1] => Array
(
[0] => rocks.com
)
)
)
对于所需结构:
Array
(
[0] => hey.com
[1] => you.com
[2] => this.com
[3] => rocks.com
)
速度至关重要-我们将处理数十万个结果您可以使用
递归阵列迭代器
$it = new RecursiveIteratorIterator(new RecursiveArrayIterator($data));
$list = iterator_to_array($it,false);
var_dump($list);
输出
array (size=4)
0 => string 'hey.com' (length=7)
1 => string 'you.com' (length=7)
2 => string 'this.com' (length=8)
3 => string 'rocks.com' (length=9)
如果您的阵列始终具有以前已知的相同深度,那么您可以充分利用 这将使阵列平坦一级。它将获取您提供的示例输入,并生成您要求的所需输出 确定
array\u merge
抱怨没有参数而出现php错误$flat = array_merge(...$arr);
如果您使用的是PHP5.6+,则splat运算符(…
)可以通过以下方式更具可读性:
foreach($arr as $key=>$val) {
if (is_array($arr[$key])) $arr[$key] = $arr[$key][0];
}
Getting:
[file] => Array (
[name] => black.png
[type] => image/png
[tmp_name] => /tmp/phpfupdU5
[error] => 0
[size] => 197782
)
from:
[file] => Array (
[name] => Array
( [0] => black.png )
[type] => Array
( [0] => image/png )
[tmp_name] => Array
( [0] => /tmp/phpfupdU5 )
[error] => Array
( [0] => 0 )
[size] => Array
( [0] => 197782 )
)
如果数组与关联索引只有一个级别,并且只有一个元素:
$array = [
[
['hey.com'],
['you.com'],
],
[
['this.com'],
['rocks.com'],
],
];
print_r(array_merge(... array_merge(... $array)));
Getting:
Array
(
[0] => hey.com
[1] => you.com
[2] => this.com
[3] => rocks.com
)
如果值始终处于相同的深度级别,则确实可以使用array_merge:
你真的希望结果是
数组(数组('hey.com'、'you.com'、'this.com'、'rocks.com'))
?我只需要一个包含所有实际值的平面数组,仅此而已。请参阅我刚刚做的编辑。如果数组中只有固定(单个)项,只需使用一些嵌套的foreach()
循环即可。否则就去做点什么吧。递归ArrayIterator很漂亮…+1,非常感谢!在这种情况下不需要循环,请参阅。iterator\u to\u array
+我对OP的建议是忘记使用iterator\u to\u array()
,只需在迭代器上循环。到目前为止,最好的解决方案,感谢它对我有效:)解决了我的问题。万分感谢
// with
$arr = [ [1,2,3], [4,5,6] ];
// call_user_func_array('array_merge', $arr) is like calling
array_merge($arr[0], $arr[1]);
// and with
$arr = [ [1,2,3], [4,5,6], [7,8,9] ];
// then it's like:
array_merge($arr[0], $arr[1], $arr[2]);
// and so on...
$flat = array_merge(...$arr);
foreach($arr as $key=>$val) {
if (is_array($arr[$key])) $arr[$key] = $arr[$key][0];
}
Getting:
[file] => Array (
[name] => black.png
[type] => image/png
[tmp_name] => /tmp/phpfupdU5
[error] => 0
[size] => 197782
)
from:
[file] => Array (
[name] => Array
( [0] => black.png )
[type] => Array
( [0] => image/png )
[tmp_name] => Array
( [0] => /tmp/phpfupdU5 )
[error] => Array
( [0] => 0 )
[size] => Array
( [0] => 197782 )
)
$array = [
[
['hey.com'],
['you.com'],
],
[
['this.com'],
['rocks.com'],
],
];
print_r(array_merge(... array_merge(... $array)));
Getting:
Array
(
[0] => hey.com
[1] => you.com
[2] => this.com
[3] => rocks.com
)