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用户指南-cookies部分
Oct 09 PHP
第十五节--Zend引擎的发展
Nov 16 PHP
hessian 在PHP中的使用介绍
Dec 13 PHP
php htmlspecialchars()与shtmlspecialchars()函数的深入分析
Jun 05 PHP
深入php处理整数函数的详解
Jun 09 PHP
解析php中session的实现原理以及大网站应用应注意的问题
Jun 17 PHP
php动态生成函数示例
Mar 21 PHP
浅谈discuz密码加密的方式
May 22 PHP
thinkPHP5.0框架模块设计详解
Mar 18 PHP
php检查函数必传参数是否存在的实例详解
Aug 28 PHP
PHP Swoole异步读取、写入文件操作示例
Oct 24 PHP
PHP Pipeline 实现中间件的示例代码
Apr 26 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
解决MySQL中文输出变成问号的问题
2008/06/05 PHP
简介PHP的Yii框架中缓存的一些高级用法
2016/03/29 PHP
web页面数据展示新想法(json)
2010/06/08 Javascript
《JavaScript高级程序设计》阅读笔记(二) ECMAScript中的原始类型
2012/02/27 Javascript
js猜数字小游戏的简单实现代码
2013/07/02 Javascript
jquery用data方法获取某个元素上的事件
2014/06/23 Javascript
javascript面向对象之this关键词用法分析
2015/01/13 Javascript
JavaScript实现Java中StringBuffer的方法
2015/02/09 Javascript
JavaScript实现的浮动层框架用法实例分析
2015/10/10 Javascript
javascript数据结构之双链表插入排序实例详解
2015/11/25 Javascript
JS中对象与字符串的互相转换详解
2016/05/20 Javascript
jQuery中借助deferred来请求及判断AJAX加载的实例讲解
2016/05/24 Javascript
jQuery中的insertBefore(),insertAfter(),after(),before()区别介绍
2016/09/01 Javascript
jQuery版AJAX简易封装代码
2016/09/14 Javascript
详解Nodejs基于mongoose模块的增删改查的操作
2016/12/21 NodeJs
Vue axios 中提交表单数据(含上传文件)
2017/07/06 Javascript
jQuery模拟爆炸倒计时功能实例代码
2017/08/21 jQuery
js设置随机切换背景图片的简单实例
2017/11/12 Javascript
vue下拉菜单组件(含搜索)的实现代码
2018/11/25 Javascript
mockjs+vue页面直接展示数据的方法
2018/12/19 Javascript
vue vantUI实现文件(图片、文档、视频、音频)上传(多文件)
2019/10/15 Javascript
Vue实现剪贴板复制功能
2019/12/31 Javascript
[02:17]DOTA2亚洲邀请赛 RAVE战队出场宣传片
2015/02/07 DOTA
python3连接MySQL数据库实例详解
2018/05/24 Python
pandas实现将dataframe满足某一条件的值选出
2019/06/12 Python
PyQt5的安装配置过程,将ui文件转为py文件后显示窗口的实例
2019/06/19 Python
详解如何修改jupyter notebook的默认目录和默认浏览器
2021/01/24 Python
几个MySql的面试题
2013/04/22 面试题
会计实习期自我鉴定
2013/10/06 职场文书
《诚实与信任》教学反思
2014/04/10 职场文书
营销学习心得体会
2014/09/12 职场文书
个人委托书范文
2015/01/28 职场文书
爱牙日宣传活动总结
2015/02/05 职场文书
感谢信
2019/04/11 职场文书
利用python做表格数据处理
2021/04/13 Python
MySQL中JOIN连接的基本用法实例
2022/06/05 MySQL