列出项目的搜索功能


Search function listing items

我有这段小代码,它列出了包含已搜索的键的所有匹配项。

我目前的代码列出了所有的东西,不管它在数组中出现多少次。

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是侦听都在一个数组中。例如,如果我搜索"Red dragon."。

  • id为1的项目被列出是因为我搜索了"龙"。
  • id为3的物品被列出是因为我搜索了"龙"。
  • id为4的项目被列出是因为我搜索了"China"。
  • id为1的物品再次被列出,因为我搜索了"红色"。

因为item 1有两次点击,所以我希望item 1只出现一次,并且在顶部…

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

有谁能帮我把它设置成一个列表,在这个例子中,当搜索"Red dragon"时,它会返回一个列表:

  • 条目1,因为您搜索了Dragon
  • 条目3,因为你搜索了Dragon
  • 条目4,因为你搜索的是China
  • 条目1,因为您搜索了红色

它回显如下:

  • 条目1,因为你搜索了龙和红
  • 条目3,因为你搜索了Dragon
  • 条目4,因为你搜索的是China

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

提前感谢恩济

添加另一个数组,跟踪已回显的数组。

$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;
        }
   }
}

添加多个原因为什么一行被打印似乎不可能与你这样做,因为$inf变量在每次通过for循环被覆盖。在您的过程中进行一些修改,您将能够打印出返回值的多个原因。但这应该可以消除你的多个回复。

编辑:给这个机会。我不确定array_count_values将如何发挥作用,因为我不知道你在$return[n]中有什么。

编辑#2:我是个白痴,忘记了根据值从高到低对数组进行排序。