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

PHP如何将数组元素按首字母分组得到指定的键值结构?

问题原因

你使用array_map的逻辑是对每个输入元素单独返回一个一维数组,该函数只会将回调的返回值和原数组索引一一对应返回,不会自动合并相同键的元素,因此得到了嵌套的二维数组,和预期结果不符。

调整方案

推荐直接遍历原数组实现分组,逻辑更直观、性能更好,实现代码如下:

$a = ['abc','cde','frtg','acf'];
$b = [];
foreach ($a as $str) {
    // 提取首字母
    $firstChar = substr($str, 0, 1);
    // 对应首字母分组不存在则初始化
    if (!isset($b[$firstChar])) {
        $b[$firstChar] = [];
    }
    // 将当前单词加入对应分组
    $b[$firstChar][] = $str;
}
// 将每个分组的数组转为逗号分隔的字符串
$b = array_map(fn($item) => implode(',', $item), $b);
print_r($b);

运行后输出和你的预期完全一致:

Array
(
    [a] => abc,acf
    [c] => cde
    [f] => frtg
)

如果你一定要基于原有代码的输出结果调整,可以补充合并逻辑,不过会多一次遍历,效率低于上述方案:

// 原有代码得到的$b
function alpha($str) {
    $result[substr($str,0,1)] = $str;
    return $result;
}
$a = ['abc','cde','frtg','acf'];
$b = array_map('alpha', $a);

// 补充合并逻辑
$final = [];
foreach ($b as $item) {
    foreach ($item as $key => $val) {
        $final[$key] = isset($final[$key]) ? $final[$key].','.$val : $val;
    }
}
print_r($final);

内容的提问来源于stack exchange,提问作者wav

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 12:57:01