PHP实现二维数组的横向转纵向 array_map

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

1 2 3 4 5
1 2 3 4 5

转换成这样的结果 $y

1 1
2 2
3 3
4 4
5 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);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值