array_column()

1. 定义

取出一个多维数组中某一列的值,类似于数据库二维表格。 返回包含这个列数据的数组。

2. 语法

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

3. 参数说明

参数 可选性 数据类型 描述
$input 必需 数组 指定的多维数组
$column_key 必需 mixed 指定的列名,可以是数组键名,也可以是对象的属性名
$index_key 必需 mixed 返回数组的索引值,可以是指定列的键名

其中,$input可以是多维数组,也可以是包含一组对象的数组。如果是对象,那么只有public属性可以被取出;如果想要取出protectedprivate属性,那么必须在类中实现__get()__isset()魔术方法。

4. 示例

<?php

// array_column()
// 取出一个多维数组中某一列的值,类似于数据库二维表格

// 多维数组
$multidimensionalArr = [
    ['id'=>32, 'name'=>'Linn', 'gender'=>1, 'profile'=>'我是Linn,今年23岁'],
    ['id'=>35, 'name'=>'Alex', 'gender'=>0, 'profile'=>'我是Alex,今年18岁'],
    ['id'=>38, 'name'=>'Bob', 'gender'=>0, 'profile'=>'我是Bob,今年20岁'],
    ['id'=>42, 'name'=>'Angle', 'gender'=>1, 'profile'=>'我是Angle,今年24岁'],
];

// 查找列名为 name 的列值
$res = array_column($multidimensionalArr, 'name');
var_dump($res);
/* 输出:
array(4) {
  [0]=>
  string(4) "Linn"
  [1]=>
  string(4) "Alex"
  [2]=>
  string(3) "Bob"
  [3]=>
  string(5) "Angle"
}
*/

// 查找列名为 name 的列值,并在生成的数组中以对应的 id 作为数组索引
$res = array_column($multidimensionalArr, 'name', 'id');
var_dump($res);
/* 输出:
array(4) {
  [32]=>
  string(4) "Linn"
  [35]=>
  string(4) "Alex"
  [38]=>
  string(3) "Bob"
  [42]=>
  string(5) "Angle"
}
*/

// 查找列名为 profile 的列值,并在生成的数组中以对应的 name 作为数组索引
$res = array_column($multidimensionalArr, 'profile', 'name');
var_dump($res);
/* 输出:
array(4) {
  ["Linn"]=>
  string(24) "我是Linn,今年23岁"
  ["Alex"]=>
  string(24) "我是Alex,今年18岁"
  ["Bob"]=>
  string(23) "我是Bob,今年20岁"
  ["Angle"]=>
  string(25) "我是Angle,今年24岁"
}
*/

// 类对象属性获取
class User{
    public $name = '';
    public $gender = 0;
    protected $hobby = '爱好';
    private $profile = '个人介绍';

    public function __construct($name)
    {
        $this->name = $name;
    }
    public function __get($prop)
    {
        return $this->$prop;// 获取指定属性
    }
    public function __isset($prop)
    {
        return isset($this->$prop);// 确定该属性是否存在
    }
}
$multidimensionalArr = [
    new User('Linn'),
    new User('Alex'),
    new User('Bob'),
    new User('Angle')
];
$res = array_column($multidimensionalArr, 'name');// 查找列名为 name 的列值
var_dump($res);
/* 输出:
array(4) {
  [0]=>
  string(4) "Linn"
  [1]=>
  string(4) "Alex"
  [2]=>
  string(3) "Bob"
  [3]=>
  string(5) "Angle"
}
*/
$res = array_column($multidimensionalArr, 'profile', 'name');// 查找私有属性
var_dump($res);
/* 输出:
array(4) {
  ["Linn"]=>
  string(12) "个人介绍"
  ["Alex"]=>
  string(12) "个人介绍"
  ["Bob"]=>
  string(12) "个人介绍"
  ["Angle"]=>
  string(12) "个人介绍"
}
*/