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+dbfile开发小型留言本
Oct 09 PHP
PHP排序之二维数组的按照字母排序实现代码
Aug 13 PHP
PHP高自定义性安全验证码代码
Nov 27 PHP
学习php分页代码实例
Oct 24 PHP
ThinkPHP实例化模型的四种方法概述
Aug 22 PHP
百度工程师讲PHP函数的实现原理及性能分析(一)
May 13 PHP
php中memcache 基本操作实例
May 17 PHP
在WordPress中获取数据库字段内容和添加主题设置菜单
Jan 11 PHP
CodeIgniter开发实现支付宝接口调用的方法示例
Nov 14 PHP
PHP递归实现汉诺塔问题的方法示例
Nov 25 PHP
实现php删除链表中重复的结点
Sep 27 PHP
PHP工厂模式、单例模式与注册树模式实例详解
Jun 03 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错误日志 display_errors与log_errors的区别
2012/10/09 PHP
php如何解决无法上传大于8M的文件问题
2014/03/10 PHP
PHP结合Mysql数据库实现留言板功能
2016/03/04 PHP
jquery一句话全选/取消全选
2011/03/01 Javascript
jquery制作居中遮罩层效果分享
2014/02/21 Javascript
jquery图片轮播插件仿支付宝2013版全屏图片幻灯片
2014/04/03 Javascript
js实现数组冒泡排序、快速排序原理
2016/03/08 Javascript
KnockoutJS 3.X API 第四章之事件event绑定
2016/10/10 Javascript
微信小程序 input输入框控件详解及实例(多种示例)
2016/12/14 Javascript
浅谈关于angularJs中使用$.ajax的注意点
2017/08/12 Javascript
详解vue-router 路由元信息
2017/09/13 Javascript
vue轮播图插件vue-awesome-swiper
2017/11/27 Javascript
微信小程序使用video组件播放视频功能示例【附源码下载】
2017/12/08 Javascript
详解vue axios二次封装
2018/07/22 Javascript
11个教程中不常被提及的JavaScript小技巧(推荐)
2019/04/17 Javascript
layui复选框限制选择个数的方法
2019/09/18 Javascript
VUE+elementui组件在table-cell单元格中绘制微型echarts图
2020/04/20 Javascript
vue 使用async写数字动态加载效果案例
2020/07/18 Javascript
[06:45]DOTA2卡尔工作室 英雄介绍幻影长矛手篇
2013/07/12 DOTA
[01:09:13]DOTA2-DPC中国联赛 正赛 CDEC vs XG BO3 第三场 1月19日
2021/03/11 DOTA
python计算圆周长、面积、球体体积并画出圆
2014/04/08 Python
Python实现的tab文件操作类分享
2014/11/20 Python
centos6.5安装python3.7.1之后无法使用pip的解决方案
2019/02/14 Python
解决python 找不到module的问题
2020/02/12 Python
python使用nibabel和sitk读取保存nii.gz文件实例
2020/07/01 Python
浅谈Python3中print函数的换行
2020/08/05 Python
PyCharm Ctrl+Shift+F 失灵的简单有效解决操作
2021/01/15 Python
canvas学习笔记之2d画布基础的实现
2019/02/21 HTML / CSS
html5的画布canvas——画出弧线、旋转的图形实例代码+效果图
2013/06/09 HTML / CSS
Currentbody德国站:健康与美容技术专家
2020/04/05 全球购物
写自荐信要注意什么
2013/12/26 职场文书
员工试用期考核自我鉴定
2014/04/13 职场文书
2014教师教育实践活动对照检查材料思想汇报
2014/09/21 职场文书
毕业生就业推荐表导师评语
2014/12/31 职场文书
如何理解及使用Python闭包
2021/06/01 Python
Axios取消重复请求的方法实例详解
2021/06/15 Javascript