Mehrdimensionales Array in eindimensionales Array umwandeln

Ich habe mir schon seit einer Weile den Kopf aufgeschlagen.

Ich habe dieses mehrdimensionale Array:

Array ( [0] => Array ( [0] => foo [1] => bar [2] => hello ) [1] => Array ( [0] => world [1] => love ) [2] => Array ( [0] => stack [1] => overflow [2] => yep [3] => man ) 

Und ich muss das bekommen:

 Array ( [0] => foo [1] => bar [2] => hello [3] => world [4] => love [5] => stack [6] => overflow [7] => yep [8] => man ) 

Irgendwelche Ideen?

Alle anderen Lösungen, die ich gefunden habe, lösen mehrdimensionale Arrays mit unterschiedlichen Schlüsseln. Meine Arrays verwenden nur einfache numerische Schlüssel.

   
 array_reduce($array, 'array_merge', array()) 

Beispiel:

 $a = array(array(1, 2, 3), array(4, 5, 6)); $result = array_reduce($a, 'array_merge', array()); 

Ergebnis:

 array[1, 2, 3, 4, 5, 6]; 

Die PHP array_merge Docs- function kann Ihr Array array_merge :

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

Falls das ursprüngliche Array eine höhere Tiefe als 2 Ebenen hat, hat der SPL in PHP einen RecursiveArrayIterator Sie ihn reduzieren können:

 $flat = iterator_to_array(new RecursiveIteratorIterator(new RecursiveArrayIterator($array)), 0); 

Siehe auch: Wie man ein mehrdimensionales Array abflacht? .

Das ist wirklich alles, was dazu gehört:

 foreach($array as $subArray){ foreach($subArray as $val){ $newArray[] = $val; } } 
 foreach ($a as $v1) { foreach ($v1 as $v2) { echo "$v2\n"; } } 

wo $ a ist Ihr Array-Name. für Details

Ab PHP 5.3 scheint die kürzeste Lösung array_walk_recursive () mit der neuen Closures-Syntax zu sein:

 function flatten(array $array) { $return = array(); array_walk_recursive($array, function($a) use (&$return) { $return[] = $a; }); return $return; } 

Ab PHP 5.6 kann dies einfacher mit dem Entpacken von Argumenten geschehen.

 $flat = array_merge(...$array); 

In PHP5.6 gibt es einen anderen Weg, um dieses Problem zu lösen, die functionen array_shift() zu kombinieren, um die ersten Elemente des ursprünglichen Arrays zu entfernen, array_pus() , um Elemente ein neues Array hinzuzufügen, das Wichtigste ist das von ... splat / elipse operator entpackt die Rückgabe von array_shitf() wie ein Argument.

 < ?php $arr = [ ['foo', 'bar', 'hello'], ['world', 'love'], ['stack', 'overflow', 'yep', 'man', 'wow'] ]; $new = []; while($item = array_shift($arr)){ array_push($new, ...$item); } print_r($new); 

Ausgabe:

 Array ( [0] => foo [1] => bar [2] => hello [3] => world [4] => love [5] => stack [6] => overflow [7] => yep [8] => man [9] => wow ) 

Beispiel - ideone

Ich hatte diesen Code verwendet, um die gleiche Art von Problem zu lösen. also kannst du es auch versuchen.

 function array_flatten($array) { if (!is_array($array)) { return FALSE; } $result = array(); foreach ($array as $key => $value) { if (is_array($value)) { $result = array_merge($result, array_flatten($value)); } else { $result[$key] = $value; } } return $result; } 
 $blocked_dates = array( '2014' => Array ( '8' => Array ( '3' => '1', '4' => '1', '6' => '1', '10' => '1', '15' => '1', '25' => '1' ) ), '2015' => Array ( '9' => Array ( '3' => '1', '4' => '1', '6' => '1', '10' => '1', '15' => '1', '25' => '1' ) ) ); 

RESUTL (EIN DIMENSIONALES ARRAY):

 $unavailable_dates = array(); foreach ($blocked_dates as $year=>$months) { foreach ($months as $month => $days) { foreach ($days as $day => $value) { array_push($unavailable_dates,"$year-$month-$day"); } } } $unavailable_dates = json_encode($unavailable_dates); print_r($unavailable_dates); OUTPUT : ["2014-8-3","2014-8-4","2014-8-6","2014-8-10","2014-8-15","2014-8-25","2015-9-3","2015-9-4","2015-9-6","2015-9-10","2015-9-15","2015-9-25"] 

Dadurch wird array_walk_recursive ($ array, function ($ a) use (& $ return) {$ return [] = $ a;});