array_column 返回数组中指定的一列

发表日期:2021-07-01 08:57:05 | 来源: | | 浏览(475) 分类:数组 函数

array_column

(PHP 5 >= 5.5.0, PHP 7, PHP 8)

array_column返回数组中指定的一列

说明

array_column(array $input, mixed $column_key, mixed $index_key = null): array

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

参数

input

需要取出数组列的多维数组。 如果提供的是包含一组对象的数组,只有 public 属性会被直接取出。 为了也能取出 private 和 protected 属性,类必须实现 __get()__isset() 魔术方法。

column_key

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

index_key

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

返回值

从多维数组中返回单列数组。

更新日志

版本 说明
7.0.0 input 参数现在可以是包含对象的数组。

范例

示例 #1 从结果集中取出first names列

<?php 
// Array representing a possible record set returned from a database$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');
print_r($first_names);
?>

以上例程会输出:

Array
(
    [0] => John
    [1] => Sally
    [2] => Jane
    [3] => Peter
)

示例 #2 从结果集中总取出last names列,用相应的id作为键值

<?php 
// Using the $records array from Example #1$last_names = array_column($records, 'last_name', 'id');
print_r($last_names);
?>

以上例程会输出:

Array
(
    [2135] => Doe
    [3245] => Smith
    [5342] => Jones
    [5623] => Doe
)

示例 #3 username 列是从对象获取 public 的 "username" 属性

<?php 
class User{
    public $username;
    public function __construct(string $username)    {
        $this->username = $username;
    }
}
$users = [    new User('user 1'),    new User('user 2'),    new User('user 3'),];
print_r(array_column($users, 'username'));
?>

以上例程会输出:

Array
(
    [0] => user 1
    [1] => user 2
    [2] => user 3
)

示例 #4 获取 username 列,从对象通过魔术方法 __get() 获取 private 的 "username" 属性。

<?php 
class Person{
    private $name;
    public function __construct(string $name)    {
        $this->name = $name;
    }
    public function __get($prop)    {
        return $this->$prop;
    }
    public function __isset($prop) : bool    {
        return isset($this->$prop);
    }
}
$people = [    new Person('Fred'),    new Person('Jane'),    new Person('John'),];
print_r(array_column($people, 'name'));
?>

以上例程会输出:

Array
(
    [0] => Fred
    [1] => Jane
    [2] => John
)
如果不提供__isset(),会返回空数组。

集速网 copyRight © 2015-2022 宁ICP备15000399号-1 宁公网安备 64010402001209号
与其临渊羡鱼,不如退而结网
欢迎转载、分享、引用、推荐、收藏。