2016-07-23 3 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 функция будет работать, или я должен использовать другую функцию? Буду признателен за вашу помощь.

+0

Поделитесь полным кодом «Код Рис.2»? – C2486

+0

'if (isset ($ searchStates [$ search])) { $ search = $ searchStates [$ search];' – splash58

+0

Можете ли вы не обновлять свою таблицу db с полными именами или даже создавать новую таблицу и присоединяться к сокращению – RamRaider

ответ

1

Хорошо, что я в конечном итоге делает удалить другие «запросы» в моей функции поиска. Из-за этого, я понимаю, что вход будет соответствовать не только базе ключевых слов, что мне нужно искать, но вместо этого он найдет, какие ближайшие символы и совпадения у меня есть в результате свойства. Итак, вот какой конец моему коду.

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

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

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

«Например, если я напечатаю Калифорнию, после запуска поиска Калифорния повернется к СА внутри входа для поиска».

1

Поиск аббревиатурой форма государственного имени для usyng в запросе

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

Я попробовал это предложение, однако после того, как я использую Калифорнию, он в конечном итоге покажет другие состояния ... Пожалуйста, посмотрите на экранный результат. https: //www.dropbox.com/s/hamrlz5u5da1d1j/Снимок экрана% 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 вместо так:

$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

Я пробовал это, но какое-то государство все еще смешивалось с результатом поиска. ех. Я ищу «Флориду», в моем выводе, он отображает всю Флориду, но внутри результата есть «Фландрия, Нью-Джерси». Я предполагаю, что «Фландрия», похоже, отражает ключевое слово «FL», не так ли? – iMarkDesigns

+0

@MarkDesigns Это просто из-за вашего запроса ... В вашем поиске указано совпадение либо со всеми именами 'contact name ',' state', 'address',' city', 'name', у которых есть поисковый термин, например' California' (например) в них. Вот почему вы получаете много результатов ... Короче говоря; просто пересмотреть свой запрос и решить его оттуда .... – Poiz

+0

Хорошо, теперь это имеет смысл ... – iMarkDesigns