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上传、管理照片示例
Oct 09 PHP
用PHP动态生成虚拟现实VRML网页
Oct 09 PHP
php in_array 函数使用说明与in_array需要注意的地方说明
Apr 13 PHP
解析coreseek for sphinx的使用
Jun 21 PHP
PHP中使用smarty生成静态文件的例子
Apr 24 PHP
PHP的拦截器实例分析
Nov 03 PHP
使用PHP实现下载CSS文件中的图片
Dec 06 PHP
Smarty变量用法详解
May 11 PHP
PDO的安全处理与事物处理方法
Oct 31 PHP
PHP版微信小店接口开发实例
Nov 12 PHP
PHP实现查询手机归属地的方法详解
Apr 28 PHP
thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能示例
Aug 13 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获取目录所有文件并将结果保存到数组(实例)
2013/10/25 PHP
php冒泡排序、快速排序、快速查找、二维数组去重实例分享
2014/04/24 PHP
安装ImageMagick出现error while loading shared libraries的解决方法
2014/09/23 PHP
Yii学习总结之数据访问对象 (DAO)
2015/02/22 PHP
php实现插入数组但不影响原有顺序的方法
2015/03/27 PHP
PHP载入图像imagecreatefrom_gif_jpeg_png系列函数用法分析
2016/11/14 PHP
php加速缓存器opcache,apc,xcache,eAccelerator原理与配置方法实例分析
2020/03/02 PHP
Mootools 1.2教程 滑动效果(Slide)
2009/09/15 Javascript
javaScript 简单验证代码(用户名,密码,邮箱)
2009/09/28 Javascript
Extjs中DisplayField的日期或者数字格式化扩展
2010/09/03 Javascript
JavaScript设置IFrame高度自适应(兼容各主流浏览器)
2013/06/05 Javascript
动态加载js、css等文件跨iframe实现
2014/02/24 Javascript
javascript引用赋值(地址传值)用法实例
2015/01/13 Javascript
js实现大转盘抽奖游戏实例
2015/06/24 Javascript
深入浅析Bootstrap列表组组件
2016/05/03 Javascript
JS常用字符串方法(推荐)
2021/01/15 Javascript
Javascript基础回顾之(二) js作用域
2017/01/31 Javascript
基于Vuejs和Element的注册插件的编写方法
2017/07/03 Javascript
前端主流框架vue学习笔记第一篇
2017/07/26 Javascript
微信小程序之蓝牙的链接
2017/09/26 Javascript
vue中axios解决跨域问题和拦截器的使用方法
2018/03/07 Javascript
Vue结合路由配置递归实现菜单栏功能
2020/06/16 Javascript
js实现简单的轮播图效果
2020/12/13 Javascript
基于python框架Scrapy爬取自己的博客内容过程详解
2019/08/05 Python
Django框架中序列化和反序列化的例子
2019/08/06 Python
Python 判断时间是否在时间区间内的实例
2020/05/16 Python
eDreams加拿大:廉价航班、酒店和度假
2019/03/29 全球购物
吨的认识教学反思
2014/04/27 职场文书
歌唱比赛策划方案
2014/06/06 职场文书
2014年采购员工作总结
2014/11/18 职场文书
入党积极分子个人总结
2015/03/02 职场文书
2015年计生协会工作总结
2015/04/24 职场文书
2016北大自主招生自荐信模板
2016/01/28 职场文书
漫画「请问您今天要来点兔子吗?」最新杂志彩页公开
2022/03/24 日漫
Jmerte 分布式压测及分布式压测配置
2022/04/30 Java/Android
错误码NET::ERR_CERT_DATE_INVALID证书已过期解决方法?
2022/07/07 数码科技