PHP-将多维数组转换为一维数组
我已经在这上面敲了一段时间了。
我有这个多维数组:
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
)
有任何想法吗?
我发现的所有其他解决方案都可以使用不同的键来解决多维数组。 我的数组仅使用简单的数字键。
11个解决方案
77 votes
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];
deceze answered 2020-02-02T06:32:37Z
38 votes
PHP RecursiveArrayIteratorDocs函数可以使数组变平:
$flat = call_user_func_array('array_merge', $array);
如果原始数组的深度大于2个级别,则PHP中的SPL具有RecursiveArrayIterator,您可以使用它来展平它:
$flat = iterator_to_array(new RecursiveIteratorIterator(new RecursiveArrayIterator($array)), 0);
另请参见:如何展平多维数组?
hakre answered 2020-02-02T06:33:07Z
9 votes
这实际上就是它的全部:
foreach($array as $subArray){
foreach($subArray as $val){
$newArray[] = $val;
}
}
Grexis answered 2020-02-02T06:33:26Z
9 votes
从PHP 5.6开始,可以使用参数解压缩更简单地完成此操作。
$flat = array_merge(...$array);
Don't Panic answered 2020-02-02T06:33:46Z
3 votes
foreach ($a as $v1) {
foreach ($v1 as $v2) {
echo "$v2\n";
}
}
其中$ a是您的数组名称。详情
n00b answered 2020-02-02T06:34:06Z
3 votes
从PHP 5.3开始,最短的解决方案似乎是使用新的闭包语法的array_walk_recursive():
function flatten(array $array) {
$return = array();
array_walk_recursive($array, function($a) use (&$return) { $return[] = $a; });
return $return;
}
Hamid Naghipour answered 2020-02-02T06:34:27Z
1 votes
在PHP5.6中,还有另一种解决此问题的方法,结合函数array_shift()删除原始数组的第一个元素,array_pus()添加项目到新数组,重要的是... splapt / elipse运算符将解压缩 返回array_shitf()之类的参数。
$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
rray answered 2020-02-02T06:34:58Z
1 votes
我曾使用此代码解决相同类型的问题。 因此您也可以尝试一下。
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;
}
Kunwar Kishor answered 2020-02-02T06:35:18Z
1 votes
这将使
array_walk_recursive($array, function($a) use (&$return) { $return[] = $a; });
Rutunj sheladiya answered 2020-02-02T06:35:38Z
0 votes
$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'
)
)
);
结果(一维数组):
$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"]
Roman answered 2020-02-02T06:35:59Z
-1 votes
最快的解决方案是使用以下数组库:
$flattened = Arr::flatten($yourArray);
这将产生您想要的数组
Minwork answered 2020-02-02T06:36:24Z