PHP实现二维数组(或多维数组)转换成一维数组的常见方法总结


Posted in PHP onDecember 04, 2019

本文实例总结了PHP实现二维数组(或多维数组)转换成一维数组的常见方法。分享给大家供大家参考,具体如下:

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

$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_map和array_reduce函数的方法类似,如下:

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

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

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

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP实现用户认证及管理完全源码
Mar 11 PHP
PHP setcookie() cannot modify header information 的解决方法
Jan 09 PHP
php设计模式小结
Feb 15 PHP
解析thinkphp中的M()与D()方法的区别
Jun 22 PHP
php根据年月获取季度的方法
Mar 31 PHP
推荐5款跨平台的PHP编辑器
Dec 25 PHP
php的sso单点登录实现方法
Jan 08 PHP
PHP创建PowerPoint2007文档的方法
Dec 10 PHP
php实现微信公众号主动推送消息
Dec 31 PHP
php 数组随机取值的简单实例
May 23 PHP
Yii中的relations数据关联查询及统计功能用法详解
Jul 14 PHP
PHP使用第三方即时获取物流动态实例详解
Apr 27 PHP
PHP实现提取多维数组指定一列的方法总结
Dec 04 #PHP
php实现快速对二维数组某一列进行组装的方法小结
Dec 04 #PHP
PHP实现发送微博消息功能完整示例
Dec 04 #PHP
PHP连续签到功能实现方法详解
Dec 04 #PHP
Laravel框架Eloquent ORM修改数据操作示例
Dec 03 #PHP
Laravel框架Eloquent ORM删除数据操作示例
Dec 03 #PHP
Laravel框架基础语法与知识点整理【模板变量、输出、include引入子视图等】
Dec 03 #PHP
You might like
PHP产生随机字符串函数
2006/12/06 PHP
PHP中抽象类、接口的区别与选择分析
2016/03/29 PHP
PHP多进程编程总结(推荐)
2016/07/18 PHP
thinkphp5.1框架模板赋值与变量输出示例
2020/05/25 PHP
extjs中grid中嵌入动态combobox的应用
2011/01/01 Javascript
jquery click([data],fn)使用方法实例介绍
2013/07/08 Javascript
兼容主流浏览器的JS复制内容到剪贴板
2014/12/12 Javascript
node.js中的fs.readlink方法使用说明
2014/12/17 Javascript
jQuery选择器基础入门教程
2016/05/10 Javascript
深入理解JS继承和原型链的问题
2016/12/17 Javascript
bootstrap fileinput 上传插件的基础使用
2017/02/17 Javascript
微信小程序中多个页面传参通信的学习与实践
2017/05/05 Javascript
Node.js微信 access_token ( jsapi_ticket ) 存取与刷新的示例
2017/09/30 Javascript
基于js原生和ajax的get和post方法以及jsonp的原生写法实例
2017/10/16 Javascript
Angular2仿照微信UI实现9张图片上传和预览的示例代码
2017/10/19 Javascript
浅析js实现网页截图的两种方式
2019/11/01 Javascript
[02:32]DOTA2英雄基础教程 美杜莎
2014/01/07 DOTA
[04:13]2018国际邀请赛典藏宝瓶Ⅱ饰品一览
2018/07/21 DOTA
python使用append合并两个数组的方法
2015/04/28 Python
说一说Python logging
2016/04/15 Python
mac下pycharm设置python版本的图文教程
2018/06/13 Python
Python爬虫基础之XPath语法与lxml库的用法详解
2018/09/13 Python
Python实现二维曲线拟合的方法
2018/12/29 Python
对python中的try、except、finally 执行顺序详解
2019/02/18 Python
Pygame的程序开始示例代码
2020/05/07 Python
解决python cv2.imread 读取中文路径的图片返回为None的问题
2020/06/02 Python
ALDI奥乐齐官方海外旗舰店:德国百年超市
2017/12/27 全球购物
日本AOKI官方商城:AOKI西装
2020/06/11 全球购物
什么是反射?如何实现反射?
2016/07/25 面试题
德尔福集团DELPHI的笔试题
2012/02/22 面试题
面试后的英文感谢信
2014/02/01 职场文书
解除劳动合同协议书
2014/04/14 职场文书
班子成员四风问题自我剖析材料
2014/09/29 职场文书
青年岗位能手事迹材料
2014/12/23 职场文书
农民工工资支付承诺书
2015/05/04 职场文书
被告答辩状范文
2015/05/22 职场文书