我有这个小代码,其中列出了包含被搜索的密钥的项目的所有匹配项。
我目前的代码列出了所有内容,无论它在数组中出现多少次。
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监听的原因都在一个数组中。 例如,如果我搜索“红龙”。
因为第1项有2次点击,所以我希望第1项只出现一次并且在顶部......
在代码中,herb [0]返回项目的id,而herb [1]返回项目在数组中的原因。
任何人都可以帮助我制作它,以便它回显一个列表,在这个例子中,而不是在搜索“红龙”时回应这个:
它回应了这个:
我希望你能理解我在这里想要达到的目标。
提前致谢,enji
答案 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:我是个白痴,忘记根据价值将数组从高到低排序。这已被添加。