array_column函数那些事

1,867 阅读1分钟

简介

中国伟大的作家、思想家鲁迅曾经说过:有二维数组的地方,就有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'));

2.当数组里,column_key不存在时,返回空数组

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

3.如果返回的数组,键相同,则发生覆盖

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

4.当数组中单条记录不存在index_key字段时,返回的数组index则从0依次递增

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

杂念

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

不得不感叹:
里面各个都是人才,说话又好听 ---窃格瓦拉

参考

1.二维数组排序
2.php手册array_colunm函数
3.php手册array_search函数