php从数组和合并节点中删除父级数组

Jar*_*ier 13 php arrays multidimensional-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
                )
        )
)
Run Code Online (Sandbox Code Playgroud)

到期望的结构:

Array
    (
        [0] => hey.com
        [1] => you.com
        [2] => this.com
        [3] => rocks.com
    )
Run Code Online (Sandbox Code Playgroud)

速度至关重要 - 我们将处理成千上万的结果

goa*_*oat 25

$flat = call_user_func_array('array_merge', $arr);
Run Code Online (Sandbox Code Playgroud)

这将使阵列平整一个级别.它将采用您提供的样本输入,并生成您要求的所需输出.

确保

  1. 您的父数组使用数字索引
  2. 父数组至少有一个子元素,否则你会因array_merge抱怨没有参数而得到一个php错误.

对于那些想知道它是如何工作的人:

// 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...
Run Code Online (Sandbox Code Playgroud)

如果您使用的是php 5.6+,则splat运算符(...)可以更具可读性:

$flat = array_merge(...$arr);
Run Code Online (Sandbox Code Playgroud)


Bab*_*aba 19

您可以使用 RecursiveArrayIterator

$it = new RecursiveIteratorIterator(new RecursiveArrayIterator($data));
$list = iterator_to_array($it,false);
var_dump($list);
Run Code Online (Sandbox Code Playgroud)

产量

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)
Run Code Online (Sandbox Code Playgroud)

请参阅简单演示

  • 好好利用`iterator_to_array` + (2认同)