PHP二维数组(或任意维数组)转换成一维数组的方法汇总(实用)

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_maparray_reduce函数的方法类似,如下:

$result = [];
array_map(function ($value) use (&$result) { $result = array_merge($result, array_values($value)); }, $user);

只是需要多声明一个空的$result数组。

 

另外,也可以用array_walk的方法,和foreach循环的方法,原理和上面一样。

 

参考地址:

  1. Turning multidimensional array into one-dimensional array
  2. 参考:https://www.cnblogs.com/isykw/p/6703493.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/112381.html原文链接:https://javaforall.net

(0)
上一篇 2021年11月8日 下午9:00
下一篇 2021年11月8日 下午9:00


相关推荐

  • 欧拉回路判定

    欧拉回路判定通过图 无向图或有向图 中所有边一次且仅一次行遍图中所有顶点的通路称为欧拉通路 通过图中所有边一次且仅一次行遍所有顶点的回路称为欧拉回路 具有欧拉回路的图称为欧拉图 EulerGraph 具有欧拉通路而无欧拉回路的图称为半欧拉图 1 定义欧拉通路 Eulertour 通过图中每条边一次且仅一次 并且过每一顶点的通路 欧拉回路

    2026年3月17日
    2
  • 你应该知道的10个奇特的 HTML5 单页网站「建议收藏」

    你应该知道的10个奇特的 HTML5 单页网站「建议收藏」网页设计师努力寻找新的方式来展现内容。其中一个大的趋势是单页网站,现在被世界上的一些大的品牌广泛采用,使用它们来为用户提供一个快速,干净和简单的而且​​美丽的网站。下面是10个令人惊叹的单页H​​T

    2022年8月3日
    7
  • 语音检测_自适应遗传算法

    语音检测_自适应遗传算法自适应回声消除算法欢迎留言交流AEC算法早期用在Voip,电话这些场景中,自从智能设备诞生后,智能语音设备也要消除自身的音源,这些音源包括音乐或者TTS机器合成声音。本文基于开源算法阐述AEC的原理和实现,基于WebRTC和speex两种算法,文末会附上两种算法的matlab实现。回声消除原理回声消除的基本原理是使用一个自适应滤波器对未知的回声信道:ω\omega进行参数辨识,根据扬声器信号与产

    2025年8月22日
    4
  • 图像拼接步骤及算法

    图像拼接步骤及算法三种图像拼接方法 APAP 方法 SPHP 方法 PT 方法图像拼接步骤图像配准 图像对齐与光束法平以及图像后处理下面介绍图像拼接的有关算法 图像配准是图像拼接中的至关重要的一步 在图像配准中 特征提取与匹配是最关键的一个步骤 普通检测方法检测的高相应值的特征点通常分布于纹理明显的区域 在相对平滑的区域 特征点分布较为稀疏 特征提取特征提取主要分为 特征检测与特征描述经典局部特征提取方法 SIFTSURFORB 通过 FAST 检测器来检测特征点 以 BRIEF 描述方式来获取描述符向量 加入了方向信

    2026年3月18日
    2
  • java二维数组输入_java 二维数组的输入输出问题[通俗易懂]

    java二维数组输入_java 二维数组的输入输出问题[通俗易懂]java二维数组的输入输出问题有一个二维数组里面包含了很大的数字。我要把它通过输出流存储在.dat文件中然后在另一个程序中把这些信息读取出来,并且存储在另外一个二维数组中。请问该怎么办?这个数组如下:intmapl[][]={{0,0,0,0,148,149,149,149,149,149,149,149,149,149,178,0,0,0,0,0,…

    2022年5月8日
    123
  • SAP QAS数据增长空间太快

    SAP QAS数据增长空间太快背景:我们是在一台数据库上删除另外的一台数据库上的大量数据,运用的crontab+linuxshell+rman,然后生产了大量的日志。解决方法清除以下的日志deletearchivelog.sh脚本exportORACLE_SID=QASexportORACLE_BASE=/oracleexportORACLE_HOME=/oracle/QAS/112_64/oracle/QAS/112_64/bin/rmantarget/<<EOFrun{cro

    2022年6月28日
    21

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号