php数组(十五) array_column
array_column — 返回输入数组中指定列的值
array_column(array
$array, int|string|null $column_key, int|string|null $index_key = null): arrayarray_column() 返回 array 中键名为 column_key 的一列值。 如果指定了可选参数 index_key,则使用输入数组中 index_key 列的值将作为返回数组中对应值的键。
参数
array
- 多维数组或对象数组,从中提取一列值。 如果提供的是对象数组,只有 public 的属性会被直接取出。 如果想取出 private 和 protected 的属性,类必须实现 __get() 和 __isset() 魔术方法。
column_key
- 需要返回值的列。它可以是索引数组的列索引,或者是关联数组的列的键,也可以是属性名。 也可以是
null,此时将返回整个数组(配合index_key参数来重新索引数组时非常好用)。
index_key
- 作为返回数组的索引/键的列。它可以是该列的整数索引,或者字符串键值。 该值会像数组键一样被 强制转换(但是,在 PHP 8.0.0 之前,也被允许支持转换为字符串对象)。
1、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
)
2、返回某一列
<?php
// 表示从数据库返回的记录集的数组
$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
)
3、从结果集中总取出 last_name 列,用相应的“id”作为键值
<?php // 使用示例 #1 中的 $records 数组 $last_names = array_column($records, 'last_name', 'id'); print_r($last_names); ?>
输出:
Array
(
[2135] => Doe
[3245] => Smith
[5342] => Jones
[5623] => Doe
)
4、以数组某一列为key,值为value
<?php
$arr = array(
array(
'id' => 2135,
'first_name' => 'John',
'last_name' => 'Doe',
),
array(
'id' => 3245,
'first_name' => 'Sally',
'last_name' => 'Smith',
)
);
$ret = array_column($arr, null, 'id');
print_r($ret);
?>
返回:
Array
(
[2135] => Array
(
[id] => 2135
[first_name] => John
[last_name] => Doe
)
[3245] => Array
(
[id] => 3245
[first_name] => Sally
[last_name] => Smith
)
)
5、键和值也可以是索引,示例 以索引0为key, 索引1位值
<?php
$arr = array(
array(
0 => 2135,
1 => 'John',
2 => 'Doe',
),
array(
0 => 3245,
1 => 'Sally',
2 => 'Smith',
)
);
$ret = array_column($arr, 1, 0);
print_r($ret);
?>
输出:
Array
(
[2135] => John
[3245] => Sally
)
posted on 2021-08-06 17:52 1450811640 阅读(104) 评论(0) 收藏 举报
浙公网安备 33010602011771号