You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP按键名后缀合并数组:是否有原生函数可实现?

按键名后缀合并PHP数组的解决方案

嘿,这个需求确实有点特定——先说结论:PHP没有专门做「按键名后缀匹配合并」的原生函数,毕竟原生函数大多覆盖通用的数组合并场景(比如完全键名匹配、递归合并),而你需要的是「键名带统一前缀,后缀对应值数组的键」这种定制化匹配。

你提到的array_merge_recursive确实满足不了需求,因为它是基于完全相同的键名来合并的:你的$keys里的键是staff_first_name,而$submitted_values里是first_name,键名完全不匹配,自然没法对应赋值。

不过我们可以用PHP的基础原生函数组合实现,比写复杂的自定义函数更简洁:

方法一:直观循环遍历

这种方式逻辑清晰,容易理解和调整:

$keys = array( 'staff_first_name' => NULL, 'staff_last_name' => NULL, 'staff_years' => NULL );
$submitted_values = array( 'first_name' => 'jon', 'last_name' => 'doe', 'years' => 5 );

$wanted_array = [];
$prefix = 'staff_';
$prefix_len = strlen($prefix);

foreach ($keys as $full_key => $default_val) {
    // 提取键名的后缀部分(去掉前缀)
    $suffix = substr($full_key, $prefix_len);
    // 用null合并运算符,优先取提交的值,没有则保留原默认值
    $wanted_array[$full_key] = $submitted_values[$suffix] ?? $default_val;
}

// 输出结果:Array ( [staff_first_name] => jon [staff_last_name] => doe [staff_years] => 5 )
print_r($wanted_array);

方法二:函数式风格(array_map + array_combine)

如果偏好更紧凑的函数式写法,可以用这几个原生函数组合:

$keys = array( 'staff_first_name' => NULL, 'staff_last_name' => NULL, 'staff_years' => NULL );
$submitted_values = array( 'first_name' => 'jon', 'last_name' => 'doe', 'years' => 5 );

$prefix = 'staff_';
$prefix_len = strlen($prefix);

// 提取所有完整键的后缀
$suffixes = array_map(function($key) use ($prefix_len) {
    return substr($key, $prefix_len);
}, array_keys($keys));

// 对应取出提交的值,无则保留原默认值
$values = array_map(function($suffix) use ($submitted_values, $keys) {
    return $submitted_values[$suffix] ?? $keys[sprintf('staff_%s', $suffix)];
}, $suffixes);

// 合并成目标数组
$wanted_array = array_combine(array_keys($keys), $values);

// 输出结果和上面一致
print_r($wanted_array);

两种方法都利用了PHP的原生工具函数,没有额外依赖,而且可以轻松调整前缀、默认值处理逻辑,完全满足你的需求。

内容的提问来源于stack exchange,提问作者Orlando P.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:36:14