Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php从数组集中删除父级数组并合并节点_Php_Arrays_Multidimensional Array - Fatal编程技术网

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
    )