How to get array of values from an associative arrays?

前端 未结 4 1696
感情败类
感情败类 2020-12-19 07:51

How can I get an array of values from an associative array ?

Associate array Example:

Array
(
    [0] => Array
        (
            [0] => 1
          


        
相关标签:
4条回答
  • 2020-12-19 08:27
    $flattened = call_user_func_array('array_merge', $array);
    
    0 讨论(0)
  • 2020-12-19 08:30

    Not sure it'll suit you, as it's PHP >= 5.3 only, but here's a possible solution, using array_walk_recursive and a closure (see Anonymous functions) :

    $array = array(
        array(1, 2, 3), 
        array(4, 5, 6), 
        array(7), 
    );
    
    $result = array();
    array_walk_recursive($array, function ($value, $key) use (& $result) {
        $result[] = $value;
    });
    var_dump($result);
    

    And the result :

    array
      0 => int 1
      1 => int 2
      2 => int 3
      3 => int 4
      4 => int 5
      5 => int 6
      6 => int 7
    

    Basicaly, the closure is the only way I got this to work : it's used to import the $result variable, by reference, into the anonymous function.



    And, just to post it, the only I got this working for PHP 5.2 (i.e. not using a closure) is with this :

    $result = array();
    array_walk_recursive($array, 'my_func', & $result);
    var_dump($result);
    
    function my_func($value, $key, & $result) {
        $result[] = $value;
    }
    

    Which works too -- but raises a warning :

    Deprecated: Call-time pass-by-reference has been deprecated
    

    Unfortunatly, I didn't find a way of getting this to work without passing $result by reference at call-time :-(
    (Maybe someone else has an idea, about how to do that ?)

    0 讨论(0)
  • 2020-12-19 08:35

    Do an array_merge() on each separate member.

    $test = Array
    (
        "0" => Array
            (
                0 => 1,
                1 => 2,
                2 => 3,
            ),
        "1" => Array
            (
                0 => 4,
                1 => 5,
                2 => 6,
            ),
        "2" => Array
            (
                0 => 7,
            )
    );
    
    print_r(array_merge($test[0],$test[1],$test[2]));
    // Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 [6] => 7 ) 
    
    0 讨论(0)
  • 2020-12-19 08:37

    under php 5.3 this should be really nice and convenient, because the array elements used by array_reduce are interpreted as mixed rather than fixed as integer

    so

    print_r(array_reduce($test, 'array_merge'))
    

    I haven't tested it -- no copy of 5.3 -- at least in theory that should do it. Under <5.3 you'll get errors.

    Note that this only merges the top level of array, unlike the solution using array_walk_recursive.

    0 讨论(0)
提交回复
热议问题