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


相关推荐

  • oracle客户端配置监听_oracle11g客户端配置

    oracle客户端配置监听_oracle11g客户端配置1、环境介绍操作系统:windows10专业版oracle版本:19coracle客户端版本:19.3oracle客户端下载地址:https://www.oracle.com/database/technologies/oracle19c-windows-downloads.html2、运行软件包中setup.exe进行安装3、使用sqlplus连接数据库sqlplus用户名/密码@服务器/服务名sqlplusdebezium/Smtgbk_123@10.99.99.20

    2025年7月29日
    6
  • VS2010序列号正式版附激活成功教程方法详细攻略

    VS2010序列号正式版附激活成功教程方法详细攻略全球开发者最为瞩目的VisualStudio2010开发工具在4月12日正式发布,现为大家制作一个简单的激活成功教程教程有两种方法,操作不一样,原都一样(针对旗舰版,其他版本方法一样):教程一:步骤1.下载VS2010正式版,下载地址:页面:http://www.microsoft.com/downloads/details.aspx?displaylang=en&Fam

    2022年7月20日
    17
  • push私库时遇到:Get https://192.168.0.180:5000/v1/_ping: http: server gave HTTP response to HTTPS client「建议收藏」

    push私库时遇到:Get https://192.168.0.180:5000/v1/_ping: http: server gave HTTP response to HTTPS client「建议收藏」解决方法:在”/etc/docker/“目录下,创建”daemon.json“文件。在文件中写入:{“insecure-registries”:[“192.168.0.180:5000”]}保存退出后,重启docker。问题解决

    2022年7月18日
    26
  • Python程序中的进程操作

    之前我们已经了解了很多进程相关的理论知识,了解进程是什么应该不再困难了,刚刚我们已经了解了,运行中的程序就是一个进程。所有的进程都是通过它的父进程来创建的。因此,运行起来的python程序也是一个进程

    2022年3月29日
    62
  • webstorm的永久激活码2021-激活码分享[通俗易懂]

    (webstorm的永久激活码2021)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月22日
    3.0K
  • 简述springboot自动配置_如何配制溶液

    简述springboot自动配置_如何配制溶液阅读收获:+1|type_1_2:理解SpringBoot自动配置原理SpringBoot是什么SpringBoot的诞生就是为了简化Spring中繁琐的XML配置,其本质依然还是Spring框架,使用SpringBoot之后可以不使用任何XML配置来启动一个服务,使得我们在使用微服务架构时可以更加快速的建立一个应用。简单来说就是SpringBoot其实不是什么新的框架,它默认配置了很多框架的使用方式。SpringBoot的特点 提供了固定的配置来简化配置…

    2022年8月21日
    12

发表回复

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

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