array_combine + array_coumn 关联数组根据某字段,重新设置 key
需求: 把 $a 数组,用 'a' 字段的值,作为每个 value 的 key
$a = [
[
'a' => 'av1',
'b' => 'bv1',
],
[
'a' => 'av2',
'b' => 'bv2',
],
[
'a' => 'av3',
'b' => 'bv3',
],
[
'a' => 'av4',
'b' => 'bv4',
],
[
'a' => 'av5',
'b' => 'bv5',
],
];
常规方案,万事不决 foreach
function array_reset_by_foreach($array, $custom_key) {
$result = [];
foreach ($array as $key => $value) {
// todo 校验完整性,如 key 不存在怎么处理
$result[$value[$custom_key]] = $value;
}
return $result;
}
array_combine + array_column
function array_reset_by_array_combine($array, $custom_key) {
return array_combine(array_column($array, $custom_key), $array);
}
测试效率
$num = 10000000;
$t_start = microtime(true);
for ($i = 0; $i < $num; $i ++) {
array_reset_by_array_combine($a, 'a');
}
var_dump(microtime(true) - $t_start);
// float(4.1986689567566)
$t = microtime(true);
for ($i = 0; $i < $num; $i ++) {
array_reset_by_foreach($a, 'a');
}
var_dump(microtime(true) - $t_start);
// float(5.4154398441315)
打赏: 微信
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。