
本文介绍如何将字符串按单词字符长度分组,生成以长度为键、同长单词为值的二维关联数组,提供简洁高效的实现方法及关键注意事项。
本文介绍如何将字符串按单词字符长度分组,生成以长度为键、同长单词为值的二维关联数组,提供简洁高效的实现方法及关键注意事项。
在 PHP 开发中,常需对字符串进行结构化处理。例如,给定字符串 "hi my name is Joe",目标是将其拆分为以单词长度为键的关联数组:"2" 对应 ["hi", "my", "is"],"4" 对应 ["name"],"3" 对应 ["Joe"]。这本质上是一个“按长度聚类”的操作,核心在于动态构建嵌套数组结构。
实现的关键在于利用 PHP 的可变键赋值语法:$result[strlen($item)][] = $item;。该语句会自动创建以单词长度为键的子数组,并将当前单词追加进去——无需预先检查键是否存在,PHP 会自动初始化空数组(当键首次出现时)。
以下是完整、健壮的实现代码:
function groupWordsByLength(string $string): array {
$words = preg_split('/\s+/', trim($string), -1, PREG_SPLIT_NO_EMPTY);
$result = [];
foreach ($words as $word) {
$length = strlen($word);
$result[$length][] = $word;
}
// 可选:按键(长度)升序排序,使输出更规范
ksort($result);
return $result;
}
// 使用示例
$string = "hi my name is Joe";
$array = groupWordsByLength($string);
print_r($array);
输出结果:
Array
(
[2] => Array
(
[0] => hi
[1] => my
[2] => is
)
[3] => Array
(
[0] => Joe
)
[4] => Array
(
[0] => name
)
)
✅ 注意事项与优化点:
- 使用
preg_split('/\s+/', ..., PREG_SPLIT_NO_EMPTY)替代简单explode(" ", ...),可安全处理多个空格、制表符或首尾空白; - 显式声明函数返回类型
: array提升类型安全性(PHP 7.0+); -
ksort($result)确保键(长度)按数字升序排列,便于阅读与后续处理; - 原始代码中
for循环内提前return是逻辑错误,会导致仅处理第一个单词——应避免在循环中过早退出。
此方案时间复杂度为 O(n),空间复杂度为 O(n),简洁高效,适用于各类文本分组场景。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











