PHP二维数组(或任意维数组)转换成一维数组的方法汇总(实用)
目录
- 1 array_reduce函数法
- 2 array_walk_recursive函数法
- 3 array_map函数法
假设有下面一个二维数组:
$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循环的方法,原理和上面一样。
参考地址:
- Turning multidimensional array into one-dimensional array
- 参考:https://www.cnblogs.com/isykw/p/6703493.html
PHP二维数组(或任意维数组)转换成一维数组的方法汇总(实用)的更多相关文章
- PHP实现二维数组(或多维数组)转换成一维数组
1 array_reduce函数法 用array_reduce()函数是较为快捷的方法: $result = array_reduce($user, function ($result, $value ...
- php将一个二维数组按照某个字段值合并成一维数组,如果有重复则将重复的合并成二维数组
版权声明:本文为博主原创文章,未经博主允许不得转载. 最近工作中碰到一个问题,用PHP将一个二维数组按照二维数组中的各个项中的某个特定字段值合并成一维数组,如果有重复则将重复的合并成二维数组,生成的二 ...
- 将二维数组转换成一维数组(基于reduce)
reduce:不改变原数组,返回一个新的数组.就是遍历数组元素,从头开始,依次往下,第一个参数是上一次的返回值,第二个参数是下一个数组元素,首次的时候第一个和第二个参数分别是 array[0], a ...
- C++入门经典-例6.10-将多维数组转换成一维数组
1:代码如下: // 6.10.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> usin ...
- Python中如何将二维列表转换成一维列表
已知:a = [(4,2,3), (5, 9, 1), (7,8,9)]希望将二维列表转换成一维列表:["4,2,3", "5, 9, 1", "7, ...
- 如何将PHP对象数组转换成普通数组
/** * 对象数组转为普通数组 * * AJAX提交到后台的JSON字串经decode解码后为一个对象数组, * 为此必须转为普通数组后才能进行后续处理, * 此函数支持多维数组处理. * * @p ...
- RBF神经网络——直接看公式,本质上就是非线性变换后的线性变化(RBF神经网络的思想是将低维空间非线性不可分问题转换成高维空间线性可分问题)
Deeplearning Algorithms tutorial 谷歌的人工智能位于全球前列,在图像识别.语音识别.无人驾驶等技术上都已经落地.而百度实质意义上扛起了国内的人工智能的大旗,覆盖无人驾驶 ...
- 字符串集合或字符串数组转换成json数组
字符串可以是List<String>类型的字符串集合,也可以是String[]类型的字符串数组,二者转换成JSON数组的方式没有什么不同.下面代码注意关键的部分即可(画红线部分). 1. ...
- 把int类型值转换成int数组(不通过string类型转换)
只适合初学者 今天同事问了我不通过string类型把int类型值123589转换成int[]数组.我想了想于是写了出来,其实不难.看你小学数学学得好不好.言归正传. 先不说代码,举个列子就知道怎么玩了 ...
随机推荐
- 用js显示系统当前日期
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- 如何合并列表中key相同的字典?
现有list: list1 = [{a: 123}, {a: 456},{b: 789}] 合并成: list2 = [{a: [123,456]},{b: [789]}] from collecti ...
- [MySQL性能优化系列] 聚合索引
1. 普通青年的索引使用方式 假设我们有一个用户表 tb_user,内容如下: name age sex jack 22 男 rose 21 女 tom 20 男 ... ... ... 执行SQL语 ...
- .net core 2.1 Razor 超快速入门
以下过程如有不明白的,可参考:https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/razor-pages/?view=aspnetcore-2 ...
- UVA1152-4 Values whose Sum is 0(分块)
Problem UVA1152-4 Values whose Sum is 0 Accept: 794 Submit: 10087Time Limit: 9000 mSec Problem Desc ...
- leetCode练习1
代码主要采用C#书写 题目: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你 ...
- SpringMVC配置多视图-内容协商原理
SpringMVC配置多视图-内容协商原理 2014年03月06日 16:46:59 日积月累_滴水石穿 阅读数:10964更多 个人分类: SpringMVC Spring Framework ...
- nginx之七:nginx path(root)文件路径配置
nginx指定文件路径有两种方式root和alias,这两者的用法区别,使用方法总结了如下,方便大家在应用过程中,快速响应.root和alias主要区别在于如何解释location后面的uri,这会使 ...
- Flask 框架 debug=Ture 和Json解码:
Flask框架常用配置文件: 以下推荐四种方法: (一):创建一个配置类. (二):正常代码配置文件. 接下下来两种方法需要新建文件: 步骤为: 1:在当前目录下新建一个文件,名字为:config.i ...
- [MicroPython]TurniBit开发板旋转按钮控制脱机摆动
一.实验目的: ?学习在PC机系统中扩展简单I/O 接口的方法 ?学习TurnipBit拼插编程 ?了解舵机工作原理 ?学习TurnipBit扩展板舵机和旋转按钮接线方式 二.所需原器件: ?Turn ...