我有这段小代码,它列出了包含已搜索的键的所有匹配项。
我目前的代码列出了所有的东西,不管它在数组中出现多少次。
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:我是个白痴,忘记了根据值从高到低对数组进行排序。