2016-07-23 4 views
0

私は自分のページに検索機能を持っています。ここでユーザーは米国の州を検索してプロパティを見つけることができます。しかし、私のデータベースレコードでは、各状態名に略語しか設定されていませんでした。だから、アメリカの州のコピーを配列リスト形式でダウンロードする。PHP in_arrayは検索値を配列リストに一致させます

コード図1

$searchStates = array(
    'Alabama'   =>'AL', 
    'Alaska'   =>'AK', 
    'Arizona'   =>'AZ', 
    'Arkansas'   =>'AR', 
    'California'  =>'CA', 
    'Colorado'   =>'CO', 
    'Connecticut'  =>'CT', 
    'Delaware'   =>'DE', 
    'Florida'   =>'FL', 
    'Georgia'   =>'GA', 
    'Hawaii'   =>'HI', 
    'Idaho'   =>'ID', 
    'Illinois'   =>'IL', 
    'Indiana'   =>'IN', 
    'Iowa'    =>'IA', 
    'Kansas'   =>'KS', 
    'Kentucky'   =>'KY', 
    'Louisiana'  =>'LA', 
    'Maine'   =>'ME', 
    'Maryland'   =>'MD', 
    'Massachusetts' =>'MA', 
    'Michigan'   =>'MI', 
    'Minnesota'  =>'MN', 
    'Mississippi'  =>'MS', 
    'Missouri'   =>'MO', 
    'Montana'   =>'MT', 
    'Nebraska'   =>'NE', 
    'Nevada'   =>'NV', 
    'New Hampshire' =>'NH', 
    'New Jersey'  =>'NJ', 
    'New Mexico'  =>'NM', 
    'New York'   =>'NY', 
    'North Carolina' =>'NC', 
    'North Dakota'  =>'ND', 
    'Ohio'    =>'OH', 
    'Oklahoma'   =>'OK', 
    'Oregon'   =>'OR', 
    'Pennsylvania'  =>'PA', 
    'Rhode Island'  =>'RI', 
    'South Carolina' =>'SC', 
    'South Dakota'  =>'SD', 
    'Tennessee'  =>'TN', 
    'Texas'   =>'TX', 
    'Utah'    =>'UT', 
    'Vermont'   =>'VT', 
    'Virginia'   =>'VA', 
    'Washington'  =>'WA', 
    'West Virginia' =>'WV', 
    'Wisconsin'  =>'WI', 
    'Wyoming'   =>'WY' 
); 

ケース:。

私のクライアントは、州名を検索するために使用し、ex: Tennessee私の結果では、それが唯一の原因略語の記録なしが表示されます私のデータベースに保存されました。私は$searchStatesのこの配列リストを使用して、状態の略語リストに一致させたいと思います。私はin_array機能を使用しようとしましたが、正しく動作していないようです。私の実際のコードを見てください。

コード図2

if (in_array($search, $searchStates)) { 

    $property->where(function($query) use ($search) { 
     $query->where('property.state','like','%'.$search.'%') 
      ->orWhere('property.contact_name','like','%'.$search.'%') 
      ->orWhere('property.address','like','%'.$search.'%') 
      ->orWhere('property.city','like','%'.$search.'%') 
      ->orWhere('property.name','like','%'.$search.'%'); 
    }); 

} 

ゴール

私は、ディスプレイ(略称米国の州の形式である)私のデータベースレコードに一致するように$searchStatesリストを使用したいです私の検索結果ページの正しい出力。

このin_array機能が働くだろうか、私は別の関数を使用する必要がありました

質問?私はあなたの助けに感謝します。代わりに、そのようなクエリ

if (isset($searchStates[$search])) { 
    $search = $searchStates[$search]; 
    // rest of your code 
+0

「コード図2」を共有しますか? – C2486

+0

'$ search = $ searchstates [$ search];' – splash58

+0

あなたは完全な名前でデータベーステーブルを更新したり、新しいテーブルを作成して略語 – RamRaider

答えて

1

[OK]を、私は私の検索機能では、他の「クエリ」を削除やって終わります。このため、入力は、検索する必要のあるキーワードだけではなく、プロパティ結果に最も近い文字と一致するものを見つけることになります。それでは、私のコードを最終的に完成させます。なぜなら、私が入力された時はいつでもの最初のものは、入力フィールドに、フルネームを述べているよりも、私は、このいずれかを選択するために管理している

if (array_key_exists($search, $searchStates)) { 
    $searchTerm = $searchStates[$search]; 

    $property->where(function($query) use ($searchTerm) { 
     $query->where('property.state','like','%'.$searchTerm.'%'); 
    }); 
} 

はバック略語に戻します。

"例カリフォルニアに入ると、検索を開始した後、カリフォルニアは検索入力内でCAに切り替わります。"

1

検索略語形式:

$searchStates = array(
     'Alabama'   =>'AL', 
     'Alaska'   =>'AK', 
     'Arizona'   =>'AZ', 
     'Arkansas'   =>'AR', 
     'California'  =>'CA', 
     'Colorado'   =>'CO', 
     'Connecticut'  =>'CT', 
     'Delaware'   =>'DE', 
     'Florida'   =>'FL', 
     'Georgia'   =>'GA', 
     'Hawaii'   =>'HI', 
     'Idaho'   =>'ID', 
     'Illinois'   =>'IL', 
     'Indiana'   =>'IN', 
     'Iowa'    =>'IA', 
     'Kansas'   =>'KS', 
     'Kentucky'   =>'KY', 
     'Louisiana'  =>'LA', 
     'Maine'   =>'ME', 
     'Maryland'   =>'MD', 
     'Massachusetts' =>'MA', 
     'Michigan'   =>'MI', 
     'Minnesota'  =>'MN', 
     'Mississippi'  =>'MS', 
     'Missouri'   =>'MO', 
     'Montana'   =>'MT', 
     'Nebraska'   =>'NE', 
     'Nevada'   =>'NV', 
     'New Hampshire' =>'NH', 
     'New Jersey'  =>'NJ', 
     'New Mexico'  =>'NM', 
     'New York'   =>'NY', 
     'North Carolina' =>'NC', 
     'North Dakota'  =>'ND', 
     'Ohio'    =>'OH', 
     'Oklahoma'   =>'OK', 
     'Oregon'   =>'OR', 
     'Pennsylvania'  =>'PA', 
     'Rhode Island'  =>'RI', 
     'South Carolina' =>'SC', 
     'South Dakota'  =>'SD', 
     'Tennessee'  =>'TN', 
     'Texas'   =>'TX', 
     'Utah'    =>'UT', 
     'Vermont'   =>'VT', 
     'Virginia'   =>'VA', 
     'Washington'  =>'WA', 
     'West Virginia' =>'WV', 
     'Wisconsin'  =>'WI', 
     'Wyoming'   =>'WY' 
    ); 

    if (array_key_exists($search, $searchStates)) { 
     $searchTerm = $searchStates[$search]; 

     $property->where(function($query) use ($searchTerm) { 
      $query->where('property.state','like','%'.$searchTerm.'%') 
        ->orWhere('property.contact_name','like','%'.$searchTerm.'%') 
        ->orWhere('property.address','like','%'.$searchTerm.'%') 
        ->orWhere('property.city','like','%'.$searchTerm.'%') 
        ->orWhere('property.name','like','%'.$searchTerm.'%'); 
     }); 

    } 
+0

私は、カリフォルニアを使用した後、提案を試みましたが、他の州も同様に表示されてしまいました...結果のスクリーングラブをご覧ください。 https://www.dropbox。com/s/hamrlz5u5da1d1j/Screenshot%202016-07-23%2018.22.45.png?dl = 0 結果ページから州のドロップダウンリストを使用した場合の実際の結果です。 https://www.dropbox.com/s/n8fzr9p4dz5k339/Screenshot%202016-07-23%2018.23.04.png?dl=0 – iMarkDesigns

1

使用array_key_existsにusyngの状態名の

+0

私はこれを試しましたが、一部の州は依然として検索結果と混ざりました。例。私は "フロリダ"を検索していますが、それはすべてフロリダを表示していますが、結果の中に "フランダース、ニュージャージー"があります。 「フランダース」はキーワード「FL」に反映されているようですね。 – iMarkDesigns

+0

@ MarkDesignsこれは単にあなたのクエリのためです...あなたの検索では、「カリフォルニア」のような検索用語を持つ 'contact'、' state'、 'address'、' city'、 'name'のいずれか、 (例えば)それらの中にある。だからこそ、あなたはそれらの多くの結果を得ているのです。あなたの質問を再訪し、そこから解決してください.... – Poiz

+0

さて、それは意味をなさない... – iMarkDesigns

関連する問題