0

私のページには検索機能があり、ユーザーは米国の州を検索して物件を見つけることができます。しかし、私のデータベースの記録では、各州名には略語しか設定されていませんでした。そこで、米国の州のコピーを配列リスト形式でダウンロードします。

コード図 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が、私の結果では、略語のみがデータベースに保存されたため、No Recordと表示されます。この配列リストを使用して$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機能は機能しましたか、それとも別の機能を使用する必要がありますか? 私はあなたの助けに感謝します。

4

3 に答える 3

1

わかりました、検索機能で他の「クエリ」を削除することになります。このため、入力は、検索する必要があるものに基づいてキーワードに一致するだけでなく、プロパティの結果にある最も近い文字と一致を見つけます。だから、これが私のコードの最終的なものです。

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

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

入力フィールドに状態のフルネームを入力するたびに略語に戻るため、最初のものよりもこれを選択することができました。

「例: 検索をトリガーした後に California と入力すると、California は検索入力内の CA に変わります。」

于 2016-07-23T11:29:15.970 に答える