php 多维数组输出一维数组,PHP-将多维数组转换为一维数组

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 RecursiveArrayIterator­Docs函数可以使数组变平:

$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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值