本文共 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/