PHP函数:筛选数据只保留指定的数组key

作者: 乘风御上者 分类: PHP 发布时间: 2019-10-10 22:35

在实际项目中筛选指定的数据并返回的操作,使用率非常频繁。经常需要处理的情况有两种,一种是一维数组很多键值对,筛选出指定的键名:

$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本身提供的大量函数,灵活的运用在项目功能上,能起到事半功倍的效果。

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!

发表回复