对一组字符串排序,使子串总在父串之后

来源:互联网 发布:mac上怎么做u盘启动盘 编辑:程序博客网 时间:2024/05/17 22:57
对一组关键词排序,使子字符串总在父字符串后面。
例:array('军','军队', '坦克军队'),排序后为array('坦克军队','军队', '军')。
这在对文章违禁词过滤时非常有用,如果不预先排序,因为过滤是俺关键词的顺序过滤的,则可能出现以下错误:
比如文章中有“坦克军队”这个词,按顺序,首先针对“军”过滤,过滤完之后成了“坦克队”,而“军队”和“坦克军队”都不在这里面,所以最终结果就成了“坦克队”,这是我们不希望看到的。
<?php$time = 0;$start = microtime(TRUE);/* 这段被注释的代码可用于从一个文件中读取违禁关键字,每个关键词独占一行$keywords = file('./not_allow_keywords.txt');foreach ($keywords as &$val) {$val = trim($val);}$keywords = array_values($keywords); */$keywords = array('军','军队', '坦克军队');$length = count($keywords);for ($i = 0; $i < $length; $i++) {for ($j = $i+1; $j < $length; $j++) {$time++;if (strpos($keywords[$j], $keywords[$i]) !== FALSE) {$keyword_tmp = $keywords[$i];$keywords[$i] = $keywords[$j];$keywords[$j] = $keyword_tmp;}}}$time_consume = microtime(TRUE) - $start;var_dump($keywords, $time, $length, $time_consume);