php Remove parent level array from set of arrays and merge nodes

后端 未结 6 1064
执念已碎
执念已碎 2020-12-14 09:40

I am terrible with manipulating arrays...given this structure I want to remove the top level array and merge all subsets into one flat array:

Array
(
    [0]         


        
6条回答
  •  孤城傲影
    2020-12-14 10:15

    $flat = call_user_func_array('array_merge', $arr);
    

    That will flatten the array by exactly one level. It will take the sample input you provided, and produce the desired output you asked for.

    Make sure

    1. your parent array uses numeric indexes
    2. the parent array has at least one child element, otherwise you'll get a php error due to array_merge complaining of no arguments.

    For those who wonder how it works:

    // 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...
    

    If you're using php 5.6+, the splat operator (...) can be more readable way of doing this:

    $flat = array_merge(...$arr);
    

提交回复
热议问题