2d multidimensional array to 1d array in php

后端 未结 8 1729
陌清茗
陌清茗 2021-01-06 00:51

Just wondering if anyone has transformed a 2 dim array to a one dim array in php. I\'ve yet to come across a clear explanation in php. Any suggestion would be appreciated.

相关标签:
8条回答
  • 2021-01-06 01:23

    This might be helpful to you if you fetching values from Query here you can use array function which will support in PHP 5.5+

    $myfield_arr = array_column($query_result, 'myfield_name');
    

    Say Good bye to loop! Enjoy Smart Code.

    0 讨论(0)
  • 2021-01-06 01:27

    you mean like this?

    $array = array(array('green', 'yellow', 'orange'), array('blue', 'black', 'white'));
    $newarray = array();
    foreach (array_values($array) as $value){
       $newarray[] = $value; 
    }
    
    0 讨论(0)
  • 2021-01-06 01:29

    Try this one:

    function array_to1d($a) {
        $out = array();
        foreach ($a as $b) {
            foreach ($b as $c) {
                if (isset($c)) {
                    $out[] = $c;
                }
            }
        }
        return $out;
    }
    

    Notice that it includes a test to see if the value is set (non-null). An array that's a transposition of an array with rows of varying length will have null values in some cells, and this check can be helpful if you're trying to linearize such a beast.

    0 讨论(0)
  • 2021-01-06 01:32

    After PHP 5.3 there have a new function called arrray_walk_recursive

    $data = [1,2,[3,4],5,[6,7,8],9];
    $output = [];
    array_walk_recursive($data, function($val) use (&$output) {
        $output[] = $val;
    });
    

    Notice that the $output is passed by reference

    The $output will result in [1,2,3,4,5,6,7,8,9]

    0 讨论(0)
  • 2021-01-06 01:33

    Your first thought should be array_reduce() whenever you have lots of something in an array and you just want one something by itself which represents them all in some way.

    From the PHP docs:

    array_reduce — Iteratively reduce the array to a single value using a callback function

    In the case of 2D => 1D array conversion, the something is array; we have lots of them in an array but we just want one of them by itself.

    function array2dTo1d($array2d)
    {
        return array_reduce($array2d, function($carry, $array) {
            return array_merge($carry, $array);
        }, []);
    }
    
    var_dump(array2dTo1d(
        [
            [23423, 5454, 567],
            [4565, 687],
        ]
    ));
    
    

    Result:

    array(5) {
      [0] =>
      int(23423)
      [1] =>
      int(5454)
      [2] =>
      int(567)
      [3] =>
      int(4565)
      [4] =>
      int(687)
    }
    
    0 讨论(0)
  • 2021-01-06 01:34

    The solution for rectangular 2D array is simple indeed, but I had a problem. My 2D-array consisted of 1D arrays of different lengths :

    $myArray = [
        [1, 2, 3, 4],
        [5, 6, 7],
        [8, 9]
    ];
    

    I came up with more generalized solution to turn any 2D array into 1D:

    function array2DTo1D($arr2D) {
        $i = 0; $j = 0;
        $arr1D = [];
        while (isset($arr2D[$i][0])) {
            while (isset($arr2D[$i][$j])) {
                $arr1D[] = $arr2D[$i][$j];
                $j++;
            }
            $i++; $j = 0;
        }
        return $arr1D;
    }
    
    0 讨论(0)
提交回复
热议问题