
本文介绍如何使用 php 将空格分隔的字符串按单词字符长度进行分组,生成以长度为键、同长度单词数组为值的关联数组。方法简洁高效,无需预扫描长度,一行赋值即可完成分组。
本文介绍如何使用 php 将空格分隔的字符串按单词字符长度进行分组,生成以长度为键、同长度单词数组为值的关联数组。方法简洁高效,无需预扫描长度,一行赋值即可完成分组。
要实现将字符串(如 "hi my name is Joe")转换为按单词长度分组的关联数组——即 ["2" => ["hi", "my", "is"], "3" => ["Joe"], "4" => ["name"]]——核心在于:遍历单词,动态以 strlen($word) 为键向结果数组追加元素。
PHP 支持通过 $array[$key][] = $value 语法直接向指定键对应的数组中追加值,即使该键尚不存在,PHP 也会自动初始化为空数组。这正是实现本需求最简洁、最符合语言特性的方案。
以下是完整、健壮的实现代码:
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
)
)
⚠️ 注意事项:
- 原始代码中
for循环内过早return,导致仅处理第一个单词;且in_array()+ 手动收集长度的方式属于冗余预处理,违背“一次遍历”的设计原则; - 必须使用
trim($string)防止首尾空格产生空单词;explode(' ', ...)在多个连续空格时可能生成空元素,需显式过滤; - 若需保持原始单词顺序(而非按键排序),可省略
ksort($result); - 此方案时间复杂度为 O(n),空间复杂度为 O(n),性能最优,适用于中大型文本处理。
该方法体现了 PHP 数组的动态性与灵活性,是字符串分组类任务的标准实践。










