搜索功能列表项

时间:2011-12-29 18:33:39

标签: php list search

我有这个小代码,其中列出了包含被搜索的密钥的项目的所有匹配项。

我目前的代码列出了所有内容,无论它在数组中出现多少次。

for ($i = 0; $i < count($return); $i++) {
    $herb = explode('<+>',$return[$i]);
    $inf = explode('<+>', $njdbData[$herb[0]]);
    echo '<div class="herbListItem" onclick="goToHerb(' . $herb[0] . ')">
          <img src="../img/herbs/' . $inf[2] . '-2.jpg" />    
          <span>'.$inf[0].'<i>'.$herb[1].'</i></span></div>';
}

我已经使所有项ID以及项ID监听的原因都在一个数组中。 例如,如果我搜索“红龙”。

  • 列出了ID为1的项目,因为我搜索了“龙”。
  • 列出了ID为3的项目,因为我搜索了“龙”。
  • 列出了ID为4的项目,因为我搜索了“中国”。
  • ID为1的项目再次列出,因为我搜索了“红色”。

因为第1项有2次点击,所以我希望第1项只出现一次并且在顶部......

在代码中,herb [0]返回项目的id,而herb [1]返回项目在数组中的原因。

任何人都可以帮助我制作它,以便它回显一个列表,在这个例子中,而不是在搜索“红龙”时回应这个:

  • 第1项,因为您搜索了龙
  • 第3项,因为您搜索了龙
  • 第4项,因为您搜索了中国
  • 第1项,因为您搜索了红色

它回应了这个:

  • 第1项,因为您搜索了龙和红色
  • 第3项,因为您搜索了龙
  • 第4项,因为您搜索了中国

我希望你能理解我在这里想要达到的目标。

提前致谢,enji

1 个答案:

答案 0 :(得分:1)

添加另一个数组,跟踪哪些数据已被回显。

$used_ones= array();
$pre_sort = array();
for ($i = 0; $i < count($return); $i++) {
    $name =  explode('<+>',$return[$i]);
    array_push($pre_sort, $name[0]);
}
$sorted = array_count_values($pre_sort);
arsort($sorted, SORT_NUMERIC);
foreach($sorted as $key=>$val) {
   for ($i = 0; $i < count($return); $i++) {
        $herb = explode('<+>',$return[$i]);
        if($herb[0] == $key){
            $inf = explode('<+>', $njdbData[$herb[0]]); 
            echo '<div class="herbListItem" onclick="goToHerb(' . $herb[0] . ')"><img src="../img/herbs/' . $inf[2] . '-2.jpg" /> <span>'.$inf[0].'<i>'.$herb[1].'</i></span></div>';
            break;
        }

   }
}

添加打印行的多种原因似乎不可能与您如何执行此操作,因为每次通过for循环时$ inf变量都会变得过于严重。通过在您的过程中进行一些修改,您将能够打印出返回值的多个原因。但这应该消除你的多重反应。

编辑:给这一点。我不确定array_count_values将如何操作,因为我不知道你在$ return [n]中有什么。 代码尚未经过测试。

编辑#2:我是个白痴,忘记根据价值将数组从高到低排序。这已被添加。