PHP 数组 for foreach 循环 array_column函数 返回多列(指定返回多个字段)

1、array_column ( array $input , mixed $column_key [, mixed $index_key = null ] ) : array

返回多维数组中指定的一列 ,如果指定了可选参数index_key,那么input数组中的这一列的值将作为返回数组中对应值的键。

参数:

input:需要取出数组列的多维数组(或结果集)

column_key:需要返回值的列,它可以是索引数组的列索引,或者是关联数组的列的键。 也可以是 NULL ,此时将返回整个数组(配合 index_key参数来重置数组键的时候,非常管用)

index_key:作为返回数组的索引/键的列,它可以是该列的整数索引,或者字符串键值。

$records  = array(
    array(
        'id'  =>  2135 ,
        'first_name'  =>  'John' ,
        'last_name'  =>  'Doe' ,
    ),
    array(
        'id'  =>  3245 ,
        'first_name'  =>  'Sally' ,
        'last_name'  =>  'Smith' ,
    ),
    array(
        'id'  =>  5342 ,
        'first_name'  =>  'Jane' ,
        'last_name'  =>  'Jones' ,
    ),
    array(
        'id'  =>  5623 ,
        'first_name'  =>  'Peter' ,
        'last_name'  =>  'Doe' ,
    )
);
 
$first_names  =  array_column ( $records ,  'first_name' );
/*
 * Array
(
    [0] => John
    [1] => Sally
    [2] => Jane
    [3] => Peter
)
 * */
$last_names  =  array_column ( $records ,  'last_name' ,  'id' );
/*
 * Array
(
    [2135] => Doe
    [3245] => Smith
    [5342] => Jones
    [5623] => Doe
)
 * */
进阶: array_column方法可以返回数组中指定一列,但不能返回多列,因此写了以下这个方法,支持返回数组中多列,参数调用与array_column相似。
<?php
/*
 *
 *  返回数组中指定多列
 * @param  Array  $input       需要取出数组列的多维数组
 * @param  String $column_keys 要取出的列名,逗号分隔,如不传则返回所有列
 * @param  String $index_key   作为返回数组的索引的列
 * @return Array
 * */
function array_columns($input, $column_keys=null, $index_key=null){
    $result = array();
    $keys =isset($column_keys)? explode(',', $column_keys) : array();
    if($input){
        foreach($input as $k=>$v){
            // 指定返回列
            if($keys){
                $tmp = array();
                foreach($keys as $key){
                    $tmp[$key] = $v[$key];
                }
            }else{
                $tmp = $v;
            }
            // 指定索引列
            if(isset($index_key)){
                $result[$v[$index_key]] = $tmp;
            }else{
                $result[] = $tmp;
            }
 
        }
    }
    return $result;
}
 
// 演示代码
$arr = array(
    array('id'=>1001, 'name'=>'fdipzone', 'age'=>18, 'profession'=>'programmer'),
    array('id'=>1002, 'name'=>'terry', 'age'=>19, 'profession'=>'designer'),
    array('id'=>1003, 'name'=>'alex', 'age'=>20, 'profession'=>'tester'),
);
echo '<pre>';
echo '指定返回列及索引列'.PHP_EOL;
$result = array_columns($arr, 'name,profession', 'id');
print_r($result);
 
echo PHP_EOL.'指定返回列,不指定索引列'.PHP_EOL;
$result = array_columns($arr, 'name,profession');
print_r($result);
 
echo PHP_EOL.'不指定返回列,指定索引列'.PHP_EOL;
$result = array_columns($arr, null, 'id');
print_r($result);
 
echo PHP_EOL.'不指定返回列,不指定索引列'.PHP_EOL;
$result = array_columns($arr);
print_r($result);
/*
 * 指定返回列及索引列
Array
(
    [1001] => Array
        (
            [name] => fdipzone
            [profession] => programmer
        )
    [1002] => Array
        (
            [name] => terry
            [profession] => designer
        )
    [1003] => Array
        (
            [name] => alex
            [profession] => tester
        )
)
指定返回列,不指定索引列
Array
(
    [0] => Array
        (
            [name] => fdipzone
            [profession] => programmer
        )
    [1] => Array
        (
            [name] => terry
            [profession] => designer
        )
    [2] => Array
        (
            [name] => alex
            [profession] => tester
        )
)
不指定返回列,指定索引列
Array
(
    [1001] => Array
        (
            [id] => 1001
            [name] => fdipzone
            [age] => 18
            [profession] => programmer
        )
    [1002] => Array
        (
            [id] => 1002
            [name] => terry
            [age] => 19
            [profession] => designer
        )
    [1003] => Array
        (
            [id] => 1003
            [name] => alex
            [age] => 20
            [profession] => tester
        )
)
不指定返回列,不指定索引列
Array
(
    [0] => Array
        (
            [id] => 1001
            [name] => fdipzone
            [age] => 18
            [profession] => programmer
        )
    [1] => Array
        (
            [id] => 1002
            [name] => terry
            [age] => 19
            [profession] => designer
        )
    [2] => Array
        (
            [id] => 1003
            [name] => alex
            [age] => 20
            [profession] => tester
        )
)
 * */
?>

原文:https://blog.51cto.com/haibo0668/5486398

Jsky博客
请先登录后发表评论
  • 最新评论
  • 总共0条评论