• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

PHP二维数组(或任意维数组)转换成一维数组的方法汇总(实用) ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

目录

  • 1 array_reduce函数法
  • 2 array_walk_recursive函数法
  • 3 array_map函数法

假设有下面一个二维数组:

$user = array(
    \'0\' => array(\'id\' => 100, \'username\' => \'a1\'),
    \'1\' => array(\'id\' => 101, \'username\' => \'a2\'),
    \'2\' => array(\'id\' => 102, \'username\' => \'a3\'),
    \'3\' => array(\'id\' => 103, \'username\' => \'a4\'),
    \'4\' => array(\'id\' => 104, \'username\' => \'a5\'),
);

现在要转换成一维数组,有两种情况:

一种是将指定列转换成一维数组,这在另一篇文章有总结:PHP提取多维数组指定一列的方法大全

现在我们重点讲第二种情况,就是把所有的值都转换成一维数组,而且键值相同不会被覆盖,转换后的一维数组是这样的:

$result = array(100, \'a1\', 101, \'a2\', 102, \'a3\', 103, \'a4\', 104, \'a5\');

主要有下面几个方法。

1 array_reduce函数法

array_reduce()函数是较为快捷的方法:

$result = array_reduce($user, function ($result, $value) {
    return array_merge($result, array_values($value));
}, array())

因为array_merge函数会把相同字符串键名的数组覆盖合并,所以必须先用array_value取出值后再合并。

如果第二维是数字键名,如:

$user = array(
    \'a\' => array(100, \'a1\'),
    \'b\' => array(101, \'a2\'),
    \'c\' => array(102, \'a3\'),
    \'d\' => array(103, \'a4\'),
    \'e\' => array(104, \'a5\'),
);

那么直接这样就可以了:

$result = array_reduce($user, \'array_merge\', array())

2 array_walk_recursive函数法

array_walk_recursive()函数就非常灵活,可以把任意维度的数组转换成一维数组。

$result = [];
array_walk_recursive($user, function($value) use (&$result) {
    array_push($result, $value);
});

例如,下面这个多维数组:

$user4 = array(
    \'a\' => array(100, \'a1\'),
    \'b\' => array(101, \'a2\'),
    \'c\' => array(
        \'d\' => array(102, \'a3\'),
        \'e\' => array(103, \'a4\'),
    ),
);

用这个方法后就变成:

$result = array(100, \'a1\', 101, \'a2\', 102, \'a3\', 103, \'a4\');

3 array_map函数法

array_maparray_reduce函数的方法类似,如下:

$result = [];
array_map(function ($value) use (&$result) {
    $result = array_merge($result, array_values($value));
}, $user);

只是需要多声明一个空的$result数组。

 

另外,也可以用array_walk的方法,和foreach循环的方法,原理和上面一样。

 

参考地址:

  1. Turning multidimensional array into one-dimensional array
  2. 参考:https://www.cnblogs.com/isykw/p/6703493.html

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap