array_column() - 从数组中取出一段

本文介绍 PHP 中 array_column 函数的实际应用,演示了如何从多维数组中抽取特定列并利用 ID 作为键值。此外,还展示了如何从对象数组中提取 public 和 private 属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、从数组中取出一段

array_column()
参数必须示例

需要取出数组列的多维数组


如果提供的是包含一组对象的数组,

只有 public 属性会被直接取出。


为了也能取出 private 和 protected 属性,

类必须实现__get() 和 __isset() 魔术方法。

$arr = 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',
    )
);

需要返回值的列


可以是索引数组的列索引,

或者是关联数组的列的键,

也可以是属性名。 


也可以是NULL,

此时将返回整个数组

(配合 参数3 来重置数组键的时候,非常管用)

first_name

作为返回数组的索引/键的列,

它可以是该列的整数索引,

或者字符串键值。

id
返回值错误 / 异常注意事项
从多维数组中返回单列数组。当使用第三个参数时,
要注意第三个参数值的唯一性,
如果第三个参数值不唯一,
获取到的结果会少
例子1:取出first names列
// 从数据库返回的可能记录集的数组
$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
// 数组使用例子1中数组
$last_names = array_column($records, 'last_name', 'id');
print_r($last_names);
返回结果:
Array
(
    [2135] => Doe
    [3245] => Smith
    [5342] => Jones
    [5623] => Doe
)
// 从数据库返回的可能记录集的数组
$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' => 5342,
        'first_name' => 'Peter',
        'last_name' => 'Doe',
    )
);
 
$first_names = array_column($records, 'first_name', 'id');
print_r($first_names);
返回结果:
Array
(
    [2135] => John
    [3245] => Sally
    [5342] => Peter
)
当$records[2]['id'] == $records[3]['id']时,在使用第三个参数,返回结果就少了Jane这个值
故如想使用第三个参数,请确保唯一性

例子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(),会返回空数组


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值