Функция поиска списка предметов - PullRequest
0 голосов
/ 29 декабря 2011

У меня есть небольшой код, в котором перечислены все совпадения элементов, в которых содержится ключ, по которому был выполнен поиск.

Код, который у меня есть в настоящее время, перечисляет все, независимо от того, сколько раз он встречается в массиве.

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

Я сделал так, чтобы все идентификаторы элементов и почему прослушиваемые идентификаторы были в массиве.Например, если я ищу «Красный дракон».

  • Элемент с идентификатором 1 попал в список, потому что я искал «Дракон».
  • Элемент с идентификатором 3 попал в списокпотому что я искал «дракон».
  • Элемент с идентификатором 4 попал в список, потому что я искал «Китай».
  • Товар с идентификатором 1 снова появился в списке, потому что я искал «красный».

Поскольку для элемента 1 было 2 попадания, я хочу, чтобы элемент 1 отображался только один раз и сверху ...

В коде трава [0] возвращает идентификаторэлемента и травы [1] возвращает, почему элемент находится в массиве.

Может кто-нибудь помочь мне сделать его так, чтобы он вывел список, где, в примере, вместо того, чтобы отображать это при поиске "Красный дракон ":

  • Item 1, потому что вы искали Dragon
  • Item 3, потому что вы искали Dragon
  • Item 4, потому что вы искали Китай
  • Элемент 1, поскольку вы искали красный

, он повторяет следующее:

  • Элемент 1, БекауЕсли вы искали Dragon и Red
  • Item 3, потому что вы искали Dragon
  • Item 4, потому что вы искали China

Я надеюсь, вы понимаете, что яЯ пытаюсь достичь здесь.

Заранее спасибо, enji

1 Ответ

1 голос
/ 29 декабря 2011

Добавить еще один массив, который отслеживает, какие из них были выведены.

$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: я идиот и забыл сортировать массив от высокого до низкого на основе значения.Это было добавлено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...