How to merge subarray in PHP most easily?

后端 未结 7 509
渐次进展
渐次进展 2020-12-03 22:32
$arr[] = array(\'A\',\'B\');
$arr[] = array(\'C\',\'B\');
...

I need to get the merged result of all sub array of $arr .

And f

相关标签:
7条回答
  • 2020-12-03 23:06

    $merged_array = array_reduce($serp_res, 'array_merge', array()); with added quotas,'array_merge', worked for me.

    0 讨论(0)
  • 2020-12-03 23:07

    OK through another question I found out that the following is actually possible (I tried myself without success, I had the wrong version) if you use PHP version >= 5.3.0:

    $merged_array = array_reduce($arr, 'array_merge', array());
    

    If you only want unique values you can apply array_unique:

    $unique_merged_array = array_unique($merged_array);
    

    This works if you only have flat elements in the arrays (i.e. no other arrays). From the documentation:

    Note: Note that array_unique() is not intended to work on multi dimensional arrays.

    If you have arrays in your arrays then you have to check manually e.g. with array_walk:

    $unique_values = array();
    
    function unique_value($value, &$target_array) {
        if(!in_array($value, $target_array, true))
            $target_array[] = $value;
    }
    
    array_walk($merged_values, 'unique_value', $unique_values);
    

    I think one can assume that the internal loops (i.e. what array_walk is doing) are at least not slower than explicit loops.

    0 讨论(0)
  • 2020-12-03 23:09

    A simple way to handle this in PHP Version >= 5.6 is to use the splat operator also called Argument Unpacking.

    $arr = array_unique(array_merge(...$arr));
    
    0 讨论(0)
  • 2020-12-03 23:11

    If you really don't want to loop, try this:

    $arr[] = array('A','B');
    $arr[] = array('C','B');
    $arr[] = array('C','D');
    $arr[] = array('F','A');
    $merged = array_unique(call_user_func_array('array_merge', $arr));
    
    0 讨论(0)
  • 2020-12-03 23:17

    This answer is based on Felix Kling post. It's more accurate version with fixing "non array" sub-elements.

    $res = array_reduce($res, function(&$res, $v) {
                                return array_merge($res, (array) $v);
                            }, array());
    
    0 讨论(0)
  • 2020-12-03 23:17

    For PHP 5.6 with splat operator:

    array_unique(array_merge(...$arr));
    
    0 讨论(0)
提交回复
热议问题