2011-12-29 10 views
0

私は、この危険を冒したキーを含むアイテムのすべての一致をリストするこの小さなコードを持っています。機能のリスト項目を検索する

私が現在持っているコードは、配列に何回出現してもすべてのものをリストしています。

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の商品がリストに登録されました。
  • "red"を検索したため、id 1のアイテムが再度表示されました。

項目1 2安打私は項目1を一度だけ、トップに表示したいのがあったので...

コードハーブで[0]項目とハーブのIDを返します[ 1]は、項目が配列内にある理由を返します。

誰もが、それは、一例では、代わりに「レッドドラゴン」を検索する際にこれをエコーの一覧をエコー表示してそれを作る私を助けることができます:

  • 項目1、あなたがドラゴンを探しているので
  • 項目3、あなたは赤
を探しているのであなたは、中国
  • 項目1を探しているので、あなたは、ドラゴン
  • 項目4を探しているのであなたはドラゴン
  • 項4探しているので、あなたが

    を中国

  • 探しているのであなたは、ドラゴンのために、赤色の
  • 項3に検索するので、

    • 項目1:

      それはこれをエコーここで達成しようとしていることを理解していただければ幸いです。事前に

      おかげで、ものがエコー出力されているかを追跡する別の配列を追加

  • 答えて

    1

    をenji。ラインが$ INFのvarialeは、forループを通過するたびにoverwrritenますので、あなたがこれをやっている方法で可能ていないように印刷された理由を複数の理由を追加

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

    。あなたのプロセスの中には、値が返された理由がいくつか表示されます。しかし、これはあなたの多重応答を排除するはずです。

    編集:これを撃ってください。 $ return [n]の中に何があるのか​​わからないので、array_count_valuesがどのように動作するのかよく分かりません。 コードはテストされていません。

    EDIT#2:私はばかだ、値に基づいて配列を高から低にソートするのを忘れてしまった。それが追加されました。

    +0

    これは一度しか表示されませんが、最も一致するものが一番上に表示されるようにする必要があります:/ –

    +0

    私は理由を印刷したくないので、おそらく何度、何度キーワードが一致したのかを数えることができるでしょう –

    +0

    これまでのおかげでありがとうございました! :D –