Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
数组中的PHP将搜索值与数组列表匹配_Php_Laravel 4.2 - Fatal编程技术网

数组中的PHP将搜索值与数组列表匹配

数组中的PHP将搜索值与数组列表匹配,php,laravel-4.2,Php,Laravel 4.2,我在我的页面上有一个搜索功能,用户可以在这里搜索美国各州以查找财产。然而,在我的数据库记录中,每个州的名称上只设置了缩写。所以我下载了一份数组列表格式的美国各州的副本 代码图1 $searchStates = array( 'Alabama' =>'AL', 'Alaska' =>'AK', 'Arizona' =>'AZ', 'Arkansas' =>'AR',

我在我的页面上有一个搜索功能,用户可以在这里搜索美国各州以查找财产。然而,在我的数据库记录中,每个州的名称上只设置了缩写。所以我下载了一份数组列表格式的美国各州的副本

代码图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
数组列表来匹配我的缩写状态列表。我尝试在数组中使用
函数,但它似乎无法正常工作。查看我的实际代码

代码图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这仅仅是因为您的查询……您的搜索结果显示与
联系人姓名
地址
城市
姓名
中的任何一个或全部匹配(例如,搜索词类似于
加利福尼亚州
)这就是为什么你会得到这么多的结果…简言之,只要重新审视你的查询并从那里解决它。。。。