0

I have a multidimensional array, but I want to put all values into one single array:

array:28 [▼
  0 => array:8 [▼
    0 => "id"
    1 => "monkey"
    2 => "horse"
    3 => "bird"
    4 => "elephant"
    5 => "cat"
    6 => "whale"
    7 => "frog"
  ]
  1 => array:4 [▼
    0 => "id"
    1 => "whale"
    2 => "lion"
    3 => "dog"
  ]
  2 => array:4 [▶]
  3 => array:4 [▶]
  4 => array:3 [▶]
  5 => array:4 [▶]
  6 => array:10 [▶]
  7 => array:3 [▶]
  8 => array:5 [▶]
  9 => array:18 [▶]
  10 => array:3 [▶]
  11 => array:4 [▶]
  12 => array:5 [▶]
  13 => array:3 [▶]
  14 => array:6 [▶]
  15 => array:3 [▶]
  16 => array:3 [▶]
  17 => array:3 [▶]
  18 => array:3 [▶]
  19 => array:4 [▶]
  20 => array:6 [▶]
  21 => array:3 [▶]
  22 => array:5 [▶]
  23 => array:8 [▶]
  24 => array:3 [▶]
  25 => array:5 [▶]
  26 => array:3 [▶]
  27 => array:5 [▶]
]

My approach:

  $singleArray = array();
  foreach ($multiArray as $key => $value){
    $singleArray[] =$value;
    array_merge($singleArray, $value);
  }
  dump($singleArray);

But this is again creating a multidimensional array

peace_love
  • 6,229
  • 11
  • 69
  • 157

3 Answers3

1

It looks like you want all sub array values to be in the single array.

$singleArray = [];
foreach($multiarray as $array) {
    $singleArray = array_merge($singleArray, array_values($array));
}

This may contain some values as a duplicate. To clean them up you can do

$uniqueValues = array_unique($singleArray);
Markus Zeller
  • 8,516
  • 2
  • 29
  • 35
  • Yes, this is what I need, just that now I have double values, like id is now multiple times "id" but I need every value only once – peace_love May 25 '20 at 14:24
1

You can use this function to convert nested array to one array.

    <?php 
        $a = ["a","b","c",["d","e",["f","g"]],["p","q","r"],["s","t","u"]];

            function convert(array $array){

                $arr = [];

                foreach ($array as $item) {
                    if(is_array($item)){
                        $arr = array_merge($arr, convert($item));
                    }else {
                        $arr[] = $item;
                    }
                }
                return $arr;
            }
            echo "<pre>";
            print_r(convert($a));
            echo "</pre>";
    ?>
TogrulZade
  • 83
  • 7
  • 1
    Please add some description of how your solution works. Code only answers aren't always that helpful. – Nigel Ren May 25 '20 at 15:01
0

Did you try with array_merge?

$array = array(yourArray1(), yourArray2());
$oneLevelArray = array_reduce($array, 'array_merge', array());