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)
发表新评论