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 相关文章推荐
apache+mysql+php+ssl服务器之完全安装攻略
Sep 05 PHP
PHP安全性漫谈
Jun 28 PHP
php生成excel列序号代码实例
Dec 24 PHP
php使用wordwrap格式化文本段落的方法
Mar 17 PHP
PHP 常用的header头部定义汇总
Jun 19 PHP
PHP实现的简单网络硬盘
Jul 29 PHP
Yii实现简单分页的方法
Apr 29 PHP
php自动提交表单的方法(基于fsockopen与curl)
May 09 PHP
php 解决扫描二维码下载跳转问题
Jan 13 PHP
Laravel框架在本地虚拟机快速安装的方法详解
Jun 11 PHP
详解php协程知识点
Sep 21 PHP
PHP 范围解析操作符(::)用法分析【访问静态成员和类常量】
Apr 14 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+javascript液晶时钟
2006/10/09 PHP
php中突破基于HTTP_REFERER的防盗链措施(stream_context_create)
2011/03/29 PHP
PHP基本语法总结
2014/09/06 PHP
Thinkphp框架开发移动端接口(1)
2016/08/18 PHP
PHP7匿名类用法分析
2016/09/26 PHP
关于jquery css的使用介绍
2013/04/18 Javascript
js导出table到excel同时兼容FF和IE示例
2013/09/03 Javascript
网页右侧悬浮滚动在线qq客服代码示例
2014/04/28 Javascript
JavaScript中string对象
2015/06/12 Javascript
Javascript实现字数统计
2015/07/03 Javascript
Jquery中request和request.form和request.querystring的区别
2015/11/26 Javascript
React服务端渲染(总结)
2017/07/01 Javascript
vue-ajax小封装实例
2017/09/18 Javascript
axios的拦截请求与响应方法
2018/08/11 Javascript
angular4自定义表单控件[(ngModel)]的实现
2018/11/23 Javascript
利用jquery和BootStrap实现动态滚动条效果
2018/12/03 jQuery
JavaScript实现获取两个排序数组的中位数算法示例
2019/02/26 Javascript
浅谈JavaScript闭包
2019/04/09 Javascript
Node.js在图片模板上生成二维码图片并附带底部文字说明实现详解
2019/08/07 Javascript
[43:41]VP vs RNG 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.21.mp4
2020/07/19 DOTA
Python中unittest用法实例
2014/09/25 Python
使用python在本地电脑上快速处理数据
2017/06/22 Python
Python实现聊天机器人的示例代码
2018/07/09 Python
Python3 串口接收与发送16进制数据包的实例
2019/06/12 Python
使用python图形模块turtle库绘制樱花、玫瑰、圣诞树代码实例
2020/03/16 Python
python实现读取类别频数数据画水平条形图案例
2020/04/24 Python
HTML5 创建canvas元素示例代码
2014/06/04 HTML / CSS
英国空调、除湿机和通风设备排名第一:Air Con Centre
2019/02/25 全球购物
浅谈react路由传参的几种方式
2021/03/23 Javascript
学生个人的自我评价分享
2013/11/05 职场文书
爱情保证书范文
2014/02/01 职场文书
高中生操行评语大全
2014/04/25 职场文书
工作检讨书怎么写
2014/10/10 职场文书
报名委托书
2015/01/29 职场文书
一般纳税人申请报告
2015/05/18 职场文书
CSS实现鼠标悬浮动画特效
2023/05/07 HTML / CSS