PHP 数组实战:统计标签并输出确定顺序
用关联数组保存标签频次,再按键排序,明确重复标签的统计规则以及读取缺失键时的默认值处理。
本节目标
用关联数组保存标签频次,再按键排序,明确重复标签的统计规则以及读取缺失键时的默认值处理。
环境与运行方法
使用 PHP 8.2 或更新版本的命令行解释器。保存为 lesson.php,先执行 php -l lesson.php 检查语法,再运行 php lesson.php。代码不需要 Web 服务器。
核心思路
PHP 数组同时承担有序映射的角色,标签字符串可以直接作为键。空值合并运算符为尚未出现的标签提供零,再递增计数。输出时排序,避免结果依赖输入先后。
完整示例
<?php
declare(strict_types=1);
$tasks = [
["tags" => ["php", "web"]],
["tags" => ["php", "cli"]]
];
$counts = [];
foreach ($tasks as $task) {
foreach ($task["tags"] as $tag) {
$counts[$tag] = ($counts[$tag] ?? 0) + 1;
}
}
ksort($counts);
foreach ($counts as $tag => $count) echo "$tag=$count\n";预期输出
cli=1
php=2
web=1逐步理解
外层遍历任务,内层遍历每个标签。这里统计出现次数,同一任务内重复标签也会重复计数。ksort 按键排序,保留标签与计数的对应关系;sort 会重新索引,不能拿来替换这个需求。
示例内部数据保证 tags 存在且是数组,外部 JSON 应先检查结构。如果业务要统计涉及任务数量,应在每条任务内部先去重,而不是对所有标签只去重一次。
常见问题与边界
- foreach 的引用形式可能留下最后元素引用,不需要修改时使用普通值遍历。
- 数字形式的字符串键可能受到数组键转换规则影响。
- 排序策略要明确,键排序不同于按频次排序。
动手练习
第一条任务增加重复 php,分别统计出现次数和涉及任务数。
参考答案
出现次数 php=3;在每条任务上先使用 array_unique 后,涉及任务数 php=2。两者都合理,但回答的是不同问题。
文章回复
0 条公开回复