php array_column返回多个列

默认不能返回多个列。

函数语法:

$arr = array_column($array, $key, $index_key);

第二个参数,可以是NULL,此时返回所有的列(通常用于修改 key )

除了 NULL,可以传递字符串,返回该列数据。

第三个参数,是返回的数组 key 的规则,默认是索引(数字)

如果希望使用关联数组,再指定字符串,用于指定key。

对于一次返回多个列,比如原本 5 列数据,只读取其中的2列,该函数默认是不可以的,需要手动写一个循环读取。

例如:

/**
 * 提取二维数组的一个或多个列(如果为一个值,则和 array_column 一模一样)
 * @param $input -- 原数组
 * @param null $column_keys
 * @param null $index_key
 * @return array
 */
function array_columns($input, $column_keys=null, $index_key=null){
    $result = array();

    //多个字符串用,分割 (可以直接传递array)
    if(is_string($column_keys)){
        $column_keys = explode(',', $column_keys);
    }
    //默认值
    $keys = $column_keys ?: array();

    if($input){
        foreach($input as $k=>$v){
            // 指定返回列
            if($keys){
                $tmp = array();
                //多列时带列名的数组
                if(count($keys)>1){
                    foreach($keys as $key){
                        $tmp[$key] = $v[$key];
                    }
                }
                //没有列名的基本元素(确保和 array_column 返回值一致)
                else{
                    $tmp = $v[$keys[0]];
                }
            }
            //返回所有列
            else{
                $tmp = $v;
            }
            //指定键名
            if(isset($index_key)){
                $result[$v[$index_key]] = $tmp;
            }
            //默认索引键名
            else{
                $result[] = $tmp;
            }
        }
    }

    return $result;
}

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注