简介
中国伟大的作家、思想家鲁迅曾经说过:有二维数组的地方,就有array_column函数。

array_column ( array $input , mixed $column_key [, mixed $index_key = null ] ) : array
array_column() 返回input数组中键值为column_key的列,如果指定了可选参数index_key,那么input数组中的这一列的值将作为返回数组中对应值的键。(出自php手册)
通过这个函数我们处理二维数组会更加得心应手,不用每次都遍历数组,代码简洁了不少。但是鲁迅也说过:世界上本来没有坑,踩的人多了,也就成了坑。此函数也有许多注意的地方,此篇文章就是展示一些使用技巧,探讨其需要注意的点。
使用场景
php从数据库中读取几行数据:
$list = array(
array(
'id' => 2135,
'first_name' => 'John',
'last_name' => 'Doe',
),
array(
'id' => 3245,
'first_name' => 'Sally',
'last_name' => 'Smith',
),
array(
'id' => 5742,
'first_name' => 'Jane',
'last_name' => 'Jones',
),
array(
'id' => 5623,
'first_name' => 'Peter',
'last_name' => 'Doe',
)
);
1.我们想要查出first_name为Peter的记录的index
$search_index = array_search('Peter', array_column($list, 'first_name'));
2.按照每条记录的id升序排列
$id_array = array_column($list, 'id');
array_multisort($id_array, SORT_ASC, $list);
3.将数据表每条记录的index改为id
$list_index_id = array_column($list, null, 'id');
需要注意的点
1.当不传入index_key时不保留原始的键,返回的是索引数组
$list = [
0 => ['id' => 0],
1 => ['id' => 1],
3 => ['id' => 3]
];
$result = array_column($list, 'id');
var_dump($result);die;
结果:

$result = array_combine(array_keys($list),array_column($list,'id'));

$list = [
0 => ['id' => 0],
1 => ['id' => 1],
3 => ['id' => 3]
];
$result = array_column($list, 'uid');
var_dump($result);die;

$list = [
['uid' => 1, 'name' => 'Tom'],
['uid' => 2, 'name' => 'Jerry'],
['uid' => 3, 'name' => 'Jerry']
];
$result = array_column($list, 'uid', 'name');
var_dump($result);die;

$list = [
['uid' => 1, 'name' => 'Tom'],
['uid' => 2, 'name' => 'Jerry'],
['uid' => 3],
['uid' => 4]
];
$result = array_column($list, 'uid', 'name');
var_dump($result);die;

杂念
这篇文章里面有很多的内容是php手册下用户贡献的笔记,我只不过翻译了一下,也就是这里。

里面各个都是人才,说话又好听 ---窃格瓦拉