博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP实现二维数组的横向转纵向 array_map
阅读量:3987 次
发布时间:2019-05-24

本文共 1391 字,大约阅读时间需要 4 分钟。

你或许有过这样的需求,将这样的二维数组 $x

1 2 3 4 51 2 3 4 5

转换成这样的结果 $y

1 12 23 34 45 6

一个便捷的方式是使用array_map函数

array_map ( callable $callback , array $array1 [, array $... ] ) : array

array_map — 为数组的每个元素应用回调函数

如果传入多个一维数组,那么这些一维数组的元素个数应该相等,如果不相等会被自动填充空。
然后,这些一维数组在同一列上的元素会被同时取出作为 callback 的参数,类似于这样:

function($1n, $2n, $3n, ...) // n 表示列的编号

这是关键的原理,看文档解释:

传入两个及以上的数组时,它们元素数量将会相同。因为回调函数会并行地处理相互对应的元素。 如果几个数组的元素数量不一致:空元素会扩展短那个数组,直到长度和最长的数组一样。

此函数有个有趣的用法:传入 NULL 作为回调函数的名称,将创建多维数组(一个数组,内部包含数组。)

示例:

$a = array(1, 2, 3, 4, 5);$b = array("one", "two", "three", "four", "five");$c = array("uno", "dos", "tres", "cuatro", "cinco");$d = array_map(null, $a, $b, $c);print_r($d);

打印信息

Array(    [0] => Array        (            [0] => 1            [1] => one            [2] => uno        )    [1] => Array        (            [0] => 2            [1] => two            [2] => dos        )    [2] => Array        (            [0] => 3            [1] => three            [2] => tres        )    [3] => Array        (            [0] => 4            [1] => four            [2] => cuatro        )    [4] => Array        (            [0] => 5            [1] => five            [2] => cinco        ))

为什么会这样呢,实际上当你传入null作为回调函数的时候,就会使用默认的回调函数,而默认的回调就是直接将结果返回。

function(...$t){
return $t;}

你把这个函数代替null,将会得到同样的结果。

所以,解决方案为:

$y = array_map(null, ...$x);

或者

array_unshift($x, null);$y = call_user_func_array("array_map", $x);

转载地址:http://udaui.baihongyu.com/

你可能感兴趣的文章
在unity中建立最小的shader(Minimal Shader)
查看>>
RGB 立方体
查看>>
1.3 Debugging of Shaders (调试着色器)
查看>>
关于phpcms中模块_tag.class.php中的pc_tag()方法的含义
查看>>
vsftp 配置具有匿名登录也有系统用户登录,系统用户有管理权限,匿名只有下载权限。
查看>>
linux安装usb wifi接收器
查看>>
关于共享单车定位不准问题
查看>>
终于搞定CString和string之间转换的问题了
查看>>
用防火墙自动拦截攻击IP
查看>>
补充自动屏蔽攻击ip
查看>>
通信和通讯有什么区别?
查看>>
谷歌走了
查看>>
多线程使用随机函数需要注意的一点
查看>>
getpeername,getsockname
查看>>
让我做你的下一行Code
查看>>
浅析:setsockopt()改善程序的健壮性
查看>>
关于对象赋值及返回临时对象过程中的构造与析构
查看>>
VS 2005 CRT函数的安全性增强版本
查看>>
SQL 多表联合查询
查看>>
Visual Studio 2010:C++0x新特性
查看>>