首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >搜索PHP数组值并显示它们(如果存在

搜索PHP数组值并显示它们(如果存在
EN

Stack Overflow用户
提问于 2016-04-14 06:14:06
回答 3查看 212关注 0票数 2

我有两个页面,一个HTML页面和一个PHP页面。HTML包含一个表单,该表单要求用户键入城市名称以及如何对其进行排序(无、升序或降序)。PHP页面接收输入并包含一个城市数组。我的问题是:如果输入包含字符串的一部分,我如何显示数组中存在的值(使用循环)?例如:如果我搜索"De",它应该返回底特律和迪尔伯恩,并根据我的选择对它们进行排序。

php代码如下:

代码语言:javascript
复制
<?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";
?>
EN

回答 3

Stack Overflow用户

发布于 2016-04-14 06:20:11

fnmatch()检查的array_filter()似乎是一种合乎逻辑的方法:

代码语言:javascript
复制
$matches = array_filter(
    $cities,
    function($value) use ($city) {
        return fnmatch('*'.$city.'*', $value, FNM_CASEFOLD);
    }
);

编辑

解释一下。array_filter()针对数组($cities)中的每个值执行回调,该回调返回一个布尔值true/false,以指示是否应该接受或丢弃该值。回调使用fnmatch()函数对数组条目值和搜索值执行通配符比较;如果值匹配,则返回true;否则返回false。

结果;$matches数组只包含那些符合搜索条件的条目。

Demo

如果要对结果($matches)进行排序,则在运行该过滤器后对其进行排序

票数 0
EN

Stack Overflow用户

发布于 2016-04-14 06:26:31

首先,你可以用array_filter过滤你的城市。

代码语言:javascript
复制
$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根据顺序对您的城市进行排序。

代码语言:javascript
复制
if ($sort === 'ASC') {
    sort($filtered);
} elseif ($sort === 'DESC') {
    rsort($filtered);
}

然后,您只需返回经过筛选和排序的结果。

票数 0
EN

Stack Overflow用户

发布于 2016-04-14 06:27:11

您可以遍历数组并使用PHP strstr function查找匹配项:

代码语言:javascript
复制
$matches = array();
foreach ($cities as $city) {
    if (strstr($city, $search)) {
        $matches[] = $city;
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36610513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档