将数组中“type array”元素中的数据合并在一个新数组中

时间:2011-08-21 05:40:01

标签: php

我想我把标题吹走了。但这就是我真正需要的:

我有一个这样的数组:

array(
 '0' => array( 'the','data','i'),
 '1' => array( 'need', 'is', 'this'),
 '2' => array( 'complete', 'sentence')
);

我想成为:

array(
 'the','data','i','need','is','this','complete','sentence'
);

什么是随机的:

  1. 子数组元素中的元素数。
  2. 子数组元素的数量。

1 个答案:

答案 0 :(得分:2)

由于您提出的问题似乎不是递归展平的一般问题,因此即使其他SO问题解决了一般情况,也可能值得给出简单的解决方案作为答案。

你需要的只是

call_user_func_array("array_merge", $a);

要在完整的脚本中查看:

<?php
$a = array(
    array( 'the',' data', 'i' ),
    array( 'need', 'is', 'this' ),
    array( 'complete', 'sentence' )
);

echo var_dump($a);
echo "<br/><br/><br/>";
$b = call_user_func_array("array_merge", $a);
echo var_dump($b);
?>

这会通过附加数组来构建结果,并且可能效率低下。您可以查看SplFixedArray,它允许您预先分配空间。然后遍历原始数组中的组成数组并加载结果。这是一篇讨论SplFixedArray的博客文章,其中包括时间结果:http://www.johnciacia.com/2011/02/01/array-vs-splfixedarray/

这是一个冗长的版本:

<?php
$a = array(
    array( 'the','data','i'),
    array( 'need', 'is', 'this'),
    array( 'complete', 'sentence')
);

$size = 0;
foreach ($a as $subarray) {
    $size += count($subarray);
}

$result = new SplFixedArray($size);
# If you do not have SPL, just use $result = Array(); and write to a high index first (probably)

$i = 0;
foreach ($a as $subarray) {
    foreach ($subarray as $value) {
        $result[$i++] = $value;
    }
}

echo var_dump($result);
?>