I want to add sub arrays to one single array in php [duplicate]
Asked Answered
B

2

6

i have array like this.........

Array
(
    [0] => Array
        (
            [0] => rose
            [1] => monkey
            [2] => donkey
        )

    [1] => Array
        (
            [0] => daisy
            [1] => monkey
            [2] => donkey
        )

    [2] => Array
        (
            [0] => orchid
            [1] => monkey
            [2] => donkey
        )

)

and i want like this.........

Array
(
    [0] => rose
    [1] => monkey
    [2] => donkey
    [3] => daisy
    [4] => monkey
    [5] => donkey
    [6] => orchid
    [7] => monkey
    [8] => donkey
)

....I used array merge but it's not working because my array generates dymaically and each time shows different arrays. problem is I can't pass arrays dynamically in array_merge() function.It accepts only manually entries of array and not accepts any other variable .function accepts only array.

it works like this ...

$total_data = array_merge($data[0],$data[1],$data[2]);

as each time it generates different numbers of array dynamically so i have to use like this....

$data_array = $data[0],$data[1],$data[2];

 $total_data = array_merge($data_array);

but it shows an error "array_merge() [function.array-merge]: Argument #1 is not an array"......

Backwater answered 19/2, 2013 at 7:14 Comment(2)
Why don't you use array_push to create a new array as your requirements. php.net/manual/en/function.array-push.phpBlades
array_push($output, ...$input);Stramonium
M
23

Try this :

$array  = your array

$result = call_user_func_array('array_merge', $array);

echo "<pre>";
print_r($result);

Or try this :

function array_flatten($array) {

   $return = array();
   foreach ($array as $key => $value) {
       if (is_array($value)){ $return = array_merge($return, array_flatten($value));}
       else {$return[$key] = $value;}
   }
   return $return;

}

$array  = Your array

$result = array_flatten($array);

echo "<pre>";
print_r($result);
Mango answered 19/2, 2013 at 7:34 Comment(4)
THIS is the correct answer to this question, had to go through 3 questions and bad answers to realize this, thanks.Dubonnet
Your first answer doesn't work with a multi-dimensional array. 3v4l.org/tY8vDDao
array_merge solution is a brilliant way to flatten 2 level arrayEnculturation
but how about nesting level of a multidimensional array over 100, 200, 500 ??? dangerous code !Matrilateral
S
2

try this.....

       $result = array();
        foreach($data  as $dat)

          {
                foreach($dat as $d) 

                 {
                   $result[] = $d;

                 }

           }
Specs answered 19/2, 2013 at 7:18 Comment(1)
foreach ($data as $arr) foreach ($arr as $val) $result[] = $val; Really no need for such complicated array iteration...Fourchette

© 2022 - 2024 — McMap. All rights reserved.