
本文介绍如何将空格分隔的字符串拆分为单词,并按每个单词的字符长度自动归类到多维关联数组中,键为长度值,值为对应长度的单词列表。
本文介绍如何将空格分隔的字符串拆分为单词,并按每个单词的字符长度自动归类到多维关联数组中,键为长度值,值为对应长度的单词列表。
在 PHP 中,将字符串按单词长度分组构建关联数组是一个典型的“分组聚合”操作。核心思路是:先用 explode(" ", $string) 拆分字符串为单词数组;再遍历每个单词,以 strlen($word) 为键,将单词追加到对应键的子数组中。PHP 支持 $array[$key][] = $value 语法,可直接实现动态键名下的数组追加,无需预先检查键是否存在。
以下是完整、健壮的实现代码:
function groupWordsByLength(string $string): array {
$words = explode(' ', trim($string));
$result = [];
foreach ($words as $word) {
// 过滤空单词(如连续空格导致的空字符串)
if ($word === '') {
continue;
}
$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
)
)
✅ 关键要点说明:
-
explode(" ", $string)是基础拆分手段,但建议配合trim()防止首尾空格产生空元素; -
foreach中直接使用$result[strlen($word)][] = $word是最简洁高效的写法——PHP 会自动初始化该键对应的空数组(若不存在),再执行追加; - 原始代码中
in_array()+ 手动维护长度列表的方式不仅冗余,且无法完成分组逻辑,应避免; - 实际项目中建议添加空单词过滤(如由多个空格或制表符引起),提升鲁棒性;
- 如需保持原始单词顺序(而非按键排序),可省略
ksort();若需按单词字典序排列各子数组,可在循环后对每个$result[$len]调用sort()。
该方法时间复杂度为 O(n),空间复杂度为 O(n),适用于中等规模文本处理,是 PHP 字符串分组场景中的标准实践。










