[英]Search PHP Array Values and Display them if they exist
我有兩個頁面,一個HTML和PHP頁面。 HTML包含一個表格,要求用戶輸入城市名稱以及他們如何對其進行排序(無,升序或降序)。 PHP頁面接收輸入,並包含一個城市數組。 我的問題是:如果輸入包含字符串的一部分,如何顯示數組中存在的值(使用循環)? 例如:如果我搜索“ De”,它將返回底特律和迪爾伯恩,並根據我的選擇對它們進行排序。
這是PHP代碼:
<?php
$sort = substr(filter_input(INPUT_GET, 'sort', FILTER_SANITIZE_STRING),0,4);
$city = substr(filter_input(INPUT_GET, 'city', FILTER_SANITIZE_STRING),0,20);
$cities[0] = "Detroit, Michigan";
$cities[1] = "Rome, Italy";
$cities[2] = "New York, New York";
$cities[3] = "Austin, Texas";
$cities[4] = "Atlanta, Georgia";
$cities[5] = "Dubai, UAE";
$cities[6] = "Shanghai, China";
$cities[7] = "Mumbai, India";
$cities[8] = "Windsor, Canada";
$cities[9] = "Los Angeles, California";
$cities[10] = "Chicago, Illinois";
$cities[11] = "London, England";
$cities[12] = "Dearborn, Michigan";
$cities[13] = "Istanbul, Turkey";
$cities[14] = "Pittsburgh, Pennsylvania";
$cities[15] = "Cincinnati, Ohio";
$cities[16] = "Anaheim, California";
$cities[17] = "Orlando, Florida";
$cities[18] = "Dallas, Texas";
$cities[19] = "Hong Kong, China";
$cities[20] = "Cairo, Egypt";
?>
帶有fnmatch()檢查的array_filter()似乎是一種邏輯方法:
$matches = array_filter(
$cities,
function($value) use ($city) {
return fnmatch('*'.$city.'*', $value, FNM_CASEFOLD);
}
);
編輯
說明... array_filter()對數組($ cities)中的每個值執行回調,並且該回調返回布爾值true / false,以指示是否應接受或丟棄該值。 回調使用fnmatch()函數對數組條目值和搜索值執行通配符比較; 如果值匹配,則返回true;否則,返回true。 否則返回假。
結果; $ matches數組僅包含那些符合搜索條件的條目。
如果要對結果($ matches)進行排序; 然后在運行該過濾器后對其進行排序
首先,您可以使用array_filter
過濾城市。
$filtered = array_filter($cities, function($current) use ($city) {
// If the current city start with our input, we keep it.
return stripos($current, $city) === 0;
});
其次,你可以用你的城市排序sort
rsort
取決於訂單的。
if ($sort === 'ASC') {
sort($filtered);
} elseif ($sort === 'DESC') {
rsort($filtered);
}
然后,您只需要返回經過過濾和排序的結果。
您可以遍歷數組,並使用PHP strstr函數查找匹配項:
$matches = array();
foreach ($cities as $city) {
if (strstr($city, $search)) {
$matches[] = $city;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.