脚本宝典收集整理的这篇文章主要介绍了php – 如何将搜索字词捆绑到更有效的查询中?,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
例如,foo bar和boo吧共享栏,所以代替两个不同的搜索项,可以组合为(foo OR boo)AND bar.
这是算法需要做的.给定这个数据集:
foo bar boo bar goo bar hoo doo foo manchu moo bar too bar foo fighters "blue kazoo" bar baz qux quux
我想得到以下回覆:
(foo OR boo OR goo OR moo OR too OR "blue kazoo") AND bar foo AND (manchu OR fighters) hoo doo baz OR qux OR quux
这不行:
(foo bar) OR (boo bar) OR (goo bar) OR (foo manchu)
我将在PHP中工作,但是我会用伪代码来取得答案,PHP或者我将从主要语言转换.
@H_404_17@function keyMultiSort(&$array,$key,$reverse = false,$PRiorITy_last = false,$save_key = true,Callable $func = null) { if ($func === null) { $func = function ($First,$second) use ($key,$reverse,$priority_last) { if (!isset($first[$key])) { return ($reverse === false) ? -1 : 1; } if (!isset($second[$key])) { return ($reverse === false) ? 1 : -1; } if ($first[$key] > $second[$key]) { return ($reverse === false) ? 1 : -1; } if ($first[$key] < $second[$key]) { return ($reverse === false) ? -1 : 1; } if ($first[$key] === $second[$key]) { return ($priority_last === false) ? 1 : -1; } return 0; }; } if ($save_key) { uasort($array,$func); } else { usort($array,$func); } } $array = [ ['foo','bar'],['boo',['goo',['hoo','doo'],['foo','manchu'],['moo',['too','fighters'],['blue kazoo',]; $pairs = []; $str = ''; foreach($array as $item) { if(!isset($pairs[$item[0]]['count'])) { $pairs[$item[0]]['count'] = 1; } else { $pairs[$item[0]]['count']++; } $pairs[$item[0]]['elements'][] = $item[1]; if(!isset($pairs[$item[1]]['count'])) { $pairs[$item[1]]['count'] = 1; } else { $pairs[$item[1]]['count']++; } $pairs[$item[1]]['elements'][] = $item[0]; keyMultiSort($pairs,'count',true); } $remove = []; foreach($pairs as $elm=>$item) { $remove[] = $elm; $elements = array_diff($item['elements'],$remove); if(empty($elements)) { if (in_array($elm,$remove)) { continue; } $str .= $elm.PHP_EOL; } else { $str .= $elm.' AND ('.implode(' OR ',$elements).')'.PHP_EOL; } $remove = array_merge($remove,$elements); } var_dump($str);
结果:
string(99) "bar AND (foo OR boo OR goo OR moo OR too OR blue kazoo) foo AND (manchu OR fighters) hoo AND (doo) "
它可以优化,取决于目标…
@H_404_17@以上是脚本宝典为你收集整理的php – 如何将搜索字词捆绑到更有效的查询中?全部内容,希望文章能够帮你解决php – 如何将搜索字词捆绑到更有效的查询中?所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。