簡體   English   中英

搜索PHP數組值並顯示它們(如果存在)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM