PHP数组函数有趣用法

由一个简单的题目引入:

有一下一个数组$da

$da = array(
        'name'=>array('0'=>'张三','1'=>'李四','2'=>'王五'),
        'pwd'=>array('0'=>'zs1234','1'=>'wa1234','2'=>'ww1234'),
        'tel'=>array('0'=>'13255557785','1'=>'15624845761','2'=>'18547842158')
    );

要求将上面的数组$da转换输出数组$de

$de = array(
         '0'=>array('name'=>'张三','pwd'=>'zs1234','tel'=>'13255557785'),
         '1'=>array('name'=>'李四','pwd'=>'wa1234','tel'=>'15624845761'),
         '2'=>array('name'=>'王五','pwd'=>'ww1234','tel'=>'18547842158')
     );

首先,想到的是用循环嵌套的思路解决:

    $de = [];
    $index = ['name', 'pwd', 'tel'];
    
    for($i = 0, $len = count($index); $i < $len; $i++){
        for($j = 0, $_len = count($da[$index[$i]]); $j < $_len; $j++){
            $de[$j][$index[$i]] = $da[$index[$i]][$j];
        }
    }
    var_dump($de);        

上面循环嵌套的方法能顺利的得到我们期望的结果了,这时候我就想,PHP自带的系统函数能不能快速解决上面的问题呢?运用系统函数能够解决问题的话,性能方面应该不会比两层的循环嵌套要差!

于是,有了下面的解题方法:

    $de = array_map(null, $da['name'], $da['pwd'], $da['tel']);
    foreach($de as &$val){
        $val = array_combine(['name', 'pwd', 'tel'], $val);
    }
    p($de);

对比第一种解决方案,感觉如何?


总结:

主要三个点:

  1. array_map(),        为数组的每个元素应用回调函数;
  2. array_combine,    创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值;
  3. 引用的趣用


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值