• PHP多维数组转一维


    参考:https://www.awaimai.com/885.html

    PHP在5.5.0版本之后,通过函数array_column()实现对多维数组特定列的提取。
    
    例如如下数组:
    $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'),
    );
    

    我们要提取其中的 usename 列,变成:

    $username = array('a1', 'a2', 'a3', 'a4', 'a5');
    

    1. array_column函数

    用PHP内置的 array_column() 函数是最简单的方法,限制是PHP版本必须是5.5.0及以上版本。

    $username = array_column($user, 'username');
    

    2. array_walk函数

    array_walk()函数使用用户自定义函数对数组中的每个元素做回调处理,实现当前功能的方法:

    $username = array();
    array_walk($user, function($value, $key) use (&$username){
        $username[] = $value['username'];
    });
    

    3. array_map函数

    array_map()函数和array_walk() 作用类似,将回调函数作用到给定数组的单元上。

    $username = array();
    array_map(function($value) use (&$username){
        $username[] = $value['username'];
    }, $user);
    

    实际使用时,我们可以用array_map()写出和PHP内置array_column()一样功能的函数:

    /**
     * 获取二维数组指定的一列,并以一维数组格式返回
     * 作用和PHP5.5.0中的array_column()函数一样
     * @param $input array 需要取出数组列的多维数组(或结果集)
     * @param $column_key string 需要返回值的列,它可以是索引数组的列索引,或者是关联数组的列的键。 也可以是NULL,此时将返回整个数组
     * @param $index_key string 作为返回数组的索引/键的列,它可以是该列的整数索引,或者字符串键值。
     * @return array|null
     */
    function array_column($input, $column_key, $index_key = null) {
        $arr = array_map(function($d) use ($column_key, $index_key) {
            if (!isset($d[$column_key])) {
                return null;
            }
            if ($index_key !== null) {
                return array($d[$index_key] => $d[$column_key]);
            }
            return $d[$column_key];
        }, $input);
    
        if ($index_key !== null) {
            $tmp = array();
            foreach ($arr as $ar) {
                $tmp[key($ar)] = current($ar);
            }
            $arr = $tmp;
        }
        return $arr;
    }
    

    4. foreach循环

    foreach循环相对上面的方法效率稍微低一些,但简单容易理解。

    $username = array();
    foreach ($user as $value) {
        $username[] = $value['username'];
    }
    

    5. array_map变种

    方法如下,即把$user数组的每一项值的开头值移出,并获取移除的值作为新数组。注意此时新数组$username的键仍是原数组$user的键。

    $username = array_map('array_shift', $user);
    

    注意:该功能会获取$user中的 id 列,而不是 username 列。

    另外,如果需要获取二维数组每一项的开头列或结尾列,也可以这样做:

    $username = array_map('reset', $user);
    $username = array_map('end', $user);
    

    这三个变种方法作用比较局限,仅在获取第一列或最后一列的时候有用,在复杂的数组中就难以发挥作用了。

  • 相关阅读:
    mysql触发器实时检测一条语句进行备份删除
    ORA-12560: TNS: 协议适配器错误 windows
    DG:windows密码文件
    vim already exists!
    k8s 集群升级
    部署 k8s 备份工具 velero
    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
    lens 添加 k8s 集群
    redis系列
    s3c2440裸机-I2c编程-3.i2c中断服务程序
  • 原文地址:https://www.cnblogs.com/yueyun00/p/10316242.html
Copyright © 2020-2023  润新知