PHP结合MySQL实现合并所有行keywords字段并按字母顺序排序的方法
PHP合并MySQL所有行的逗号分隔关键词并全局排序实现
需求说明
需要读取MySQL中market表所有行的keywords字段内容,该字段为英文逗号分隔的关键词,将所有关键词合并后按字母顺序输出完整排序列表。
现有数据示例:
- voiture électrique, recyclage des batteries
- Télétravail, travail à domicile, bureau
- réchauffement climatique, effet de serre
- coworking, travail
原代码问题
原代码逻辑是逐行拆分关键词、逐行排序输出,没有把所有行的关键词汇总到同一个数组中,因此无法实现全量关键词的全局排序。
原代码参考:
<?php include_once ("config.php"); $query_top = "SELECT keywords FROM market WHERE keywords != ''"; if ($stmt_top = $bdd->prepare($query_top)) { $stmt_top->execute(); $result_top = $stmt_top->get_result(); $num_of_rows_top = $result_top->num_rows; $stmt_top->close(); } while ($row_kw = $result_top->fetch_assoc()) { $keywords = $row_kw['keywords']; $array = array_filter(array_map('trim', explode(',', $keywords))); sort($array); $array = implode('<br>', $array); echo $array . '<br/>'; } ?>
最终实现方案
调整逻辑为先收集所有关键词再统一做排序处理,针对法语等带特殊重音字符的语言,使用PHP内置的Collator类做本地化排序,避免特殊字符排序异常。
可运行代码如下:
// 初始化全局关键词存储数组 $allKeywords = []; while ($row_kw = $result_top->fetch_assoc()) { // 拆分当前行关键词并入全局数组 $allKeywords = array_merge($allKeywords, explode(',', $row_kw['keywords'])); } // 统一处理:去除关键词前后空格、过滤空值 $allKeywords = array_filter(array_map('trim', $allKeywords)); // 法语本地化排序,适配带重音的法语字符 $collator = new Collator('fr_FR'); $collator->asort($allKeywords); // 输出排序结果 echo implode('<br>', $allKeywords) . '<br/>';
内容的提问来源于stack exchange,提问作者aMoN
相关产品推荐
相关产品推荐

