PHP中实现key, value映射
在做业务时,很多场景下比如品种数据时,会有这种需求,实现方式有很多,这里介绍常用的三种。
1. foreach
这是最容易想到的方法
2. array_map
将用户自定义函数作用到数组中的每个值上,并返回用户自定义函数作用后的带有新值的数组,也可以实现
3. array_column
将二维数组转为一维数组
Demo Test
假设有如下数组结构:
$userInfo = array(
array(
"id" => 5698,
"first_name" => "Bill",
"last_name" => "Gates",
),
array(
"id" => 4767,
"first_name" => "Steve",
"last_name" => "Jobs",
),
array(
"id" => 3809,
"first_name" => "Mark",
"last_name" => "Zuckerberg",
)
);
现在需求是获取以id为key,first_name为value的数组,以下是三种实现:
$temp = [];
foreach($userInfo as $user){
$temp[$user["id"]] = $user["first_name"];
}
$tempM =[];
array_map(function($user) use (&$tempM) {
$tempM[$user["id"]] = $user["first_name"];
}, $userInfo);
$tempN = [];
$tempN = array_column($userInfo, "first_name", "id");
其结果都是:
array(3) {
[5698]=> string(4) "Bill"
[4767]=> string(5) "Steve"
[3809]=> string(4) "Mark"
}
最后
1. 从效率上来说:foreach与array_column速率在一个数量级上,基本相同,array_map要比其他两个慢一个数量级
2. 从灵活度来说:foreach在处理多维数组时,更灵活