将multidimensional array转换为一维数组

现在我一直在这个问题上磕头。

我有这个multidimensional 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 ) 

我需要得到这个:

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

有任何想法吗?

我发现的所有其他解决scheme解决multidimensional array与不同的密钥。 我的数组只使用简单的数字键。

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

例:

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

结果:

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

PHP array_merge Docs函数可以将您的数组展平:

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

如果原始数组的深度高于2级,则PHP中的SPL具有一个RecursiveArrayIterator您可以使用它来将其展平:

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

另请参阅: 如何平铺multidimensional array? 。

这其实是一切:

 foreach($array as $subArray){ foreach($subArray as $val){ $newArray[] = $val; } } 

你可以使用array_column()

例:

 <?php // Array representing a possible record set returned from a database $records = array( array( 'id' => 2135, 'first_name' => 'John', 'last_name' => 'Doe', ), array( 'id' => 3245, 'first_name' => 'Sally', 'last_name' => 'Smith', ), array( 'id' => 5342, 'first_name' => 'Jane', 'last_name' => 'Jones', ), array( 'id' => 5623, 'first_name' => 'Peter', 'last_name' => 'Doe', ) ); $first_names = array_column($records, 'first_name'); print_r($first_names); ?> 

解决scheme:我使用了hakre的解决scheme,尽pipe我也尝试过deceze的解决scheme,并且它也可以工作。 我写了:

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

简单。

 foreach ($a as $v1) { foreach ($v1 as $v2) { echo "$v2\n"; } } 

$ a是你的数组名称。 了解详情

从PHP 5.3开始,最短的解决scheme似乎是array_walk_recursive()和新的闭包语法:

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

在PHP5.6中还有其他的方法来解决这个问题,结合函数, array_shift()移除原始数组的第一个元素, array_pus()添加一个新的数组,重要的是... splapt / elipse运算符,它将像参数一样解压array_shitf()的返回值。

 <?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); 

输出:

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

例子 – ideone

我曾经使用这个代码来解决相同types的问题。 所以你也可以试试这个。

 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(一维arrays):

 $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"]