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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 关于allow_url_fopen的设置与服务器的安全–不理解

    关于allow_url_fopen的设置与服务器的安全–不理解allow_url_fopen与安全以及PHPlibcurl  allow_url_fopen=ON常常会给服务器和管理员带来麻烦,但是经常性(至少我这样认为)的我们需要远程读取某个东西,如果设置allow_url_fopen=OFF将其关闭,我们就没有办法远程读取。  幸好我们有一个很好的PHP模块–curl。下面我就以一个例子说说我用curl远程读取的方法:  第一,a

    2022年7月21日
    8
  • xshell连接虚拟机使用的是什么连接模式_vmware无法连接到虚拟机

    xshell连接虚拟机使用的是什么连接模式_vmware无法连接到虚拟机文章目录配置虚拟机网络Xshell连接理想的步骤意外后的步骤Connectionfailed出现弹框错误安装openssh-server错误配置虚拟机网络如果在本地可以ping通虚拟机的ip,就可以通过xshell连接了。Xshell连接理想的步骤点击【文件】->【新建】打开新建会话属性弹框,输入虚拟机的主机ip。切换选项卡【用户身份验证】。输入用户名,密码需要…

    2022年9月23日
    0
  • linux 下redis启动命令

    linux 下redis启动命令linux下redis启动命令/usr/local/bin/redis-server/home/data/redis-3.2.1/redis.conf如果不知道redis-server文件位置输入如下命令查询位置find/-nameredis-server查看是否启动成功:netstat-nplt…

    2022年6月26日
    57
  • html可以转换成word_html显示word文档

    html可以转换成word_html显示word文档项目后端使用了springboot,maven,前端使用了ckeditor富文本编辑器。目前从html转换的word为doc格式,而图片处理支持的是docx格式,所以需要手动把doc另存为docx,然后才可以进行图片替换。一.添加maven依赖主要使用了以下和poi相关的依赖,为了便于获取html的图片元素,还使用了jsoup:<dependency>  <gr…

    2022年10月12日
    0
  • Mysql8.0 mysqldump 报错:Unknown table ‘COLUMN_STATISTICS‘ in information_schema (1109)

    Mysql8.0 mysqldump 报错:Unknown table ‘COLUMN_STATISTICS‘ in information_schema (1109)在mysql8.0之前的mysqldump命令格式为:mysqldump–host=<server>–port=<port>–user<user>–passworddatabase>dump_file_pathmysql8.0版本此命令会报错Unknowntable’COLUMN_STATISTICS’ini…

    2022年9月15日
    0
  • mac xmind快捷键

    mac xmind快捷键tab:新建分支command+z:撤销command+”+”:放大command+”-“:缩小shift+enter:文字换行转载于:https://www.cnblogs.com/yintingting/p/5678890.html

    2022年5月3日
    149

发表回复

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

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