数组中的PHP将搜索值与数组列表匹配
我在我的页面上有一个搜索功能,用户可以在这里搜索美国各州以查找财产。然而,在我的数据库记录中,每个州的名称上只设置了缩写。所以我下载了一份数组列表格式的美国各州的副本 代码图1数组中的PHP将搜索值与数组列表匹配,php,laravel-4.2,Php,Laravel 4.2,我在我的页面上有一个搜索功能,用户可以在这里搜索美国各州以查找财产。然而,在我的数据库记录中,每个州的名称上只设置了缩写。所以我下载了一份数组列表格式的美国各州的副本 代码图1 $searchStates = array( 'Alabama' =>'AL', 'Alaska' =>'AK', 'Arizona' =>'AZ', 'Arkansas' =>'AR',
$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
数组列表来匹配我的缩写状态列表。我尝试在数组中使用
函数,但它似乎无法正常工作。查看我的实际代码
代码图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
列表匹配我的数据库记录(以美国各州的缩写格式),并在我的搜索结果页面中显示正确的输出
问题
这是数组中的
函数可以工作还是我应该使用另一个函数?非常感谢您的帮助。请在查询中查找usyng州名称的缩写形式
if (isset($searchStates[$search])) {
$search = $searchStates[$search];
// rest of your code
在查询中查找usyng的州名称缩写形式
if (isset($searchStates[$search])) {
$search = $searchStates[$search];
// rest of your code
使用array\u key\u 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.'%');
});
}
使用array\u key\u 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.'%');
});
}
好的,我最终在搜索函数中删除了其他“查询”。因此,我意识到输入不仅会根据我需要搜索的内容匹配关键字,而且会找到属性结果中最接近的字符和匹配项。这就是我的代码的结局
if (array_key_exists( $search, $searchStates )) {
$searchTerm = $searchStates[$search];
$property->where(function($query) use ($searchTerm) {
$query->where('property.state','like','%'.$searchTerm.'%');
});
}
我已经设法选择了这一个,而不是第一个,因为每当我在输入字段中键入全名时,就会返回缩写
“例如,如果我键入California,在触发搜索后,California将在搜索输入中转到CA。”好的,我将在搜索功能中删除其他“查询”。因此,我意识到输入不仅会根据我需要搜索的内容匹配关键字,而且会找到属性结果中最接近的字符和匹配项。这就是我的代码的结局
if (array_key_exists( $search, $searchStates )) {
$searchTerm = $searchStates[$search];
$property->where(function($query) use ($searchTerm) {
$query->where('property.state','like','%'.$searchTerm.'%');
});
}
我已经设法选择了这一个,而不是第一个,因为每当我在输入字段中键入全名时,就会返回缩写
“例如,如果我键入California,在触发搜索后,California将在搜索输入中转向CA。”共享完成代码图2
?如果(isset($SearchState[$search]){$search=$SearchState[$search];
你们不能用全名更新你们的db表,甚至不能创建一个新表并加入你们在数据库中用缩写形式说的缩写。所以我想你们应该在你们的查询中试试$searchStates[$search]
。分享完整的代码图2
?如果(isset($searchStates[$search]){$search=$searchStates[$search];
你们不能用全名更新你们的db表,甚至不能创建一个新表并加入你们在数据库中用缩写形式说的缩写。所以我想你们应该试试$searchStates[$search]
在您的查询中。我尝试了这个建议,但是在我使用加利福尼亚州之后,它也会显示其他州…请查看结果的屏幕抓图。如果使用结果页面中的州下拉列表,这里是实际结果。我尝试了这个建议,但是在我使用加利福尼亚州之后,它也会显示其他州。…请查看结果的屏幕抓图。如果使用结果页中的州下拉列表,这里是实际结果。我尝试了这个,但一些州仍然与搜索结果混合。例如,我搜索“Florida”,在我的输出中,它显示所有Florida,但结果中有“Flanders,NJ”。我猜,“Flanders”似乎反映了关键词“FL”,不是吗?@MarkDesigns这仅仅是因为您的查询……您的搜索结果显示匹配的是联系人姓名
,州
,地址
,城市
,姓名
,搜索词类似于加利福尼亚州
(例如)这就是为什么你会得到这么多的结果…简言之,只要重新访问你的查询并从那里解决它…我尝试了这个,但一些州仍然与搜索结果混合在一起。例如,我搜索“Florida”,在我的输出中,它显示所有Florida,但结果中有“Flanders,NJ”。我猜,“Flanders”似乎反映了关键字“FL”,不是吗?@MarkDesigns这仅仅是因为您的查询……您的搜索结果显示与联系人姓名
,州
,地址
,城市
,姓名
中的任何一个或全部匹配(例如,搜索词类似于加利福尼亚州
)这就是为什么你会得到这么多的结果…简言之,只要重新审视你的查询并从那里解决它。。。。