定义和用法

array_column() 返回输入数组中某个单一列的值。
(PHP 5 >= 5.5.0, PHP 7, PHP 8)

语法

  1. array_column(array,column_key,index_key);
参数 描述
array 必需。规定要使用的多维数组(记录集)。如果提供的是包含一组对象的数组,只有 public 属性会被直接取出。 为了也能取出 private 和 protected 属性,类必须实现 __get()__isset() 魔术方法。
如果不提供__isset(),会返回空数组
column_key 必需。需要返回值的列。
可以是索引数组的列的整数索引,或者是关联数组的列的字符串键值。
该参数也可以是 NULL,此时将返回整个数组(配合 index_key 参数来重置数组键的时候,非常有用)。
index_key 可选。用作返回数组的索引/键的列。

示例

1,从记录集中取出 last_name 列:

  1. <?php
  2. // 表示由数据库返回的可能记录集的数组
  3. $a = array(
  4. array(
  5. 'id' => 5698,
  6. 'first_name' => 'Bill',
  7. 'last_name' => 'Gates',
  8. ),
  9. array(
  10. 'id' => 4767,
  11. 'first_name' => 'Steve',
  12. 'last_name' => 'Jobs',
  13. ),
  14. array(
  15. 'id' => 3809,
  16. 'first_name' => 'Mark',
  17. 'last_name' => 'Zuckerberg',
  18. )
  19. );
  20. $last_names = array_column($a, 'last_name');
  21. print_r($last_names);
  22. ?>

image.png

2,从记录集中取出 last_name 列,用相应的 “id” 列作为键值:

  1. <?php
  2. // 表示由数据库返回的可能记录集的数组
  3. $a = array(
  4. array(
  5. 'id' => 5698,
  6. 'first_name' => 'Bill',
  7. 'last_name' => 'Gates',
  8. ),
  9. array(
  10. 'id' => 4767,
  11. 'first_name' => 'Steve',
  12. 'last_name' => 'Jobs',
  13. )
  14. array(
  15. 'id' => 3809,
  16. 'first_name' => 'Mark',
  17. 'last_name' => 'Zuckerberg',
  18. )
  19. );
  20. $last_names = array_column($a, 'last_name', 'id');
  21. print_r($last_names);
  22. ?>

image.png

3,username 列是从对象获取 public 的 “username” 属性

  1. <?php
  2. class User
  3. {
  4. public $username;
  5. public function __construct(string $username)
  6. {
  7. $this->username = $username;
  8. }
  9. }
  10. $users = [
  11. new User('user 1'),
  12. new User('user 2'),
  13. new User('user 3'),
  14. ];
  15. print_r(array_column($users, 'username'));
  16. ?>

image.png

4,获取 username 列,从对象通过魔术方法 __get() 获取 private 的 “username” 属性。

  1. <?php
  2. class Person
  3. {
  4. private $name;
  5. public function __construct(string $name)
  6. {
  7. $this->name = $name;
  8. }
  9. public function __get($prop)
  10. {
  11. return $this->$prop;
  12. }
  13. public function __isset($prop) : bool
  14. {
  15. return isset($this->$prop);
  16. }
  17. }
  18. $people = [
  19. new Person('Fred'),
  20. new Person('Jane'),
  21. new Person('John'),
  22. ];
  23. print_r(array_column($people, 'name'));
  24. ?>

image.png
如果不提供__isset(),会返回空数组。

4,取某一列为键,整个数组对象为值组成

  1. <?php
  2. /**
  3. * Created by PhpStorm
  4. * User: darry
  5. * Date: 2021/2/22
  6. * Time: 15:05
  7. */
  8. class A{
  9. public $name;
  10. public $value;
  11. public function __construct($name,$value)
  12. {
  13. $this->name = $name;
  14. $this->value = $value;
  15. }
  16. }
  17. $arr = [
  18. new A(1,2),
  19. new A("ss",2),
  20. new A("haha",2),
  21. ];
  22. $arr2 = array_column($arr,null,"name");
  23. print_r($arr2);

image.png