PHP函数:筛选数据只保留指定的数组key
在实际项目中筛选指定的数据并返回的操作,使用率非常频繁。经常需要处理的情况有两种,一种是一维数组很多键值对,筛选出指定的键名:
$data = [
'name' => 'toocf',
'age' => 18,
'avatar' => '/default.png',
...
];
// 只想要的字段
$field = ['name', 'avatar'];
// 使用 array_intersect_key 配合 array_flip 能灵活解决需求
// array_flip 将数组键值转换->['name' => 0, 'avatar'=> 1];
// array_intersect_key 比较两个数组(或多个),返回他们的共有的键名,重点是按照第一个参数数组返回,并带值返回
$newData = array_intersect_key($data, array_flip($field));
//# 再配合 array_values 使用还能解决一些使用场景
另一种是二维数组(获取的数据列表),只保留有用键值对:
$list = [
[
'uid' => 6
'name' => 'toocf',
'age' => 18,
'avatar' => '/default.png'
],
[
'uid' => 7
'name' => '乘风',
'age' => 19,
'avatar' => '/default.png'
],
...
];
// 比如只要 uid 的值:[6,7]
$ids = array_column($list, 'uid');
// 这样得到的 uid 数组就可以在框架中作为条件继续查询
$resArr = $model->where('id','in', $ids)->select();
// 通过 array_column 传递第三个参数还能解决一些功能需求
$data = array_column($list, 'name', 'uid');
// 得到数据 [6=>'toocf', 7=>'乘风']
// 参三得到的值作为键名对应参二作为键值组成一维数组
php本身提供的大量函数,灵活的运用在项目功能上,能起到事半功倍的效果。