2016-07-23 46 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

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

+0

你不能更新你的数据库表的全名或者甚至创建一个新表并加入缩写 – RamRaider

回答

1

好吧,我最终会做删除我的搜索功能之外的“查询”。由于这个原因,我意识到输入将不仅仅匹配基于我需要搜索的关键字,而是会找到属性结果中最接近的字符和匹配项。所以,这是我的代码的最终结果。

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 /截图%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这仅仅是因为你的查询......你的搜索说匹配“联系人姓名”,“州”,“地址”,“城市”,“名称”中的任一个或全部, (例如)在其中。这就是为什么你会得到那么多结果...总之;只是重新审视你的查询并从那里解决它... – Poiz

+0

好吧,它现在有意义... – iMarkDesigns