【问题标题】:Search for part of a string in array在数组中搜索字符串的一部分
【发布时间】:2012-03-03 12:14:52
【问题描述】:

我已经在网上浏览了很多帖子试图对此进行排序....

我正在将一个小型搜索功能集成到一个 php 脚本中......

我尝试了很多脚本,包括in_array(仅适用于完全匹配)和array_search

似乎没有任何效果....

我有一个脚本,它创建一个带有文件名的数组(全部采用“Random-Name-1.ext”格式) 但是脚本会删除文件扩展名,只留下文件名......

所有文件名都用-逐字分隔

所有单词的首字母大写...

数组被称为$files1;

搜索字符串被称为$search_string;

我要寻找的是沿着 foreach 循环检查搜索字符串是否包含在每个数组值的任何部分中,如果是,则将完整的数组值放入另一个名为 $search_results

因为我的脚本的下一部分分页需要数组 $search_results 来回显每个文件名并每页显示 10 个......

希望这是足够的信息,我已经为此工作了很长时间并且绞尽脑汁试图找到正确的代码......

提前致谢

....... ......

编辑.....

....... ........

得到了使用 preg_grep 的脚本.....但是我现在有一个小问题....

搜索代码前的脚本是为了获取搜索页面的url,q={search string}

然后修剪它,这样我就可以将 serach 字符串作为变量.....

我使用 str_replace 来更改页面网址

/games-search?q={search-string}

到{搜索字符串}

这很好,但是将结果分页为每页 10 个的脚本会将 ?page=2 添加到 url....

所以当我单击第 2 页时,将 url 更改为搜索字符串的 str_replace 现在不起作用,因为第 2 页的新页面 url 是

/games-search?page=2&q={search-string}

我一直在尝试做另一个 str_replace 以将连续页面 url 更改为仅搜索字符串,但我在使用正则表达式来定义页码时遇到问题.....

页码从 1 到大约 50 不等(从不超过 99,因此 2 位就足以匹配......

我今天一遍又一遍地尝试让这个正则表达式正确,但我不确定我是否以正确的方式去做.....

这是我最近的努力....

/games-search?page=(^[0-9][0-9]+)&

这就是我试图用“”替换的内容(例如,什么都没有)

&字符,我不想修改它,因为我已经有了我需要的数据)

如果有人能提供帮助,再次感谢

决定不对每次搜索的结果进行分页,因为永远不会超过 15 个结果.....这很好,但我将实现 4 个字符的最小搜索长度,因此它不会显示 500字母 A 的结果:)

【问题讨论】:

  • 您之前的 10 个问题已收到 16 个答案(我数过)。您需要重新审视以前的问题并在适当的情况下接受答案,否则人们将停止回答您的问题。

标签: php arrays search substring


【解决方案1】:

在数组中搜索子字符串匹配? preg_grep

然后做类似的事情

$search_results = ...;
$paginated = array();
for ($i = 0; $i < count($search_results); $i++)
{
    if ($i % 10 == 0) $paginated[$i + 1] = array();
    $paginated[$i][] = $search_results[$i + 1];
}

然后print_r 那个数组,你会发现你有一些非常容易使用的东西。

【讨论】:

  • 也许只需访问从 $search_results[$page * PAGE_SIZE] 到 $search_results[($page + 1) * PAGE_SIZE - 1] 的条目就足以显示页码 $page。
  • 当然,两者都有效。我这样做只是因为页面内的所有元素都可以使用任何类型的循环(尤其是 foreach)轻松循环,但任何一种方法都没有错
  • 好点。只是想分享我的解决方案而不添加完整的答案;)
  • perrrrrfect ..... 非常感谢乔,因为你的 preg_grep 链接有一个完美的例子来做我的搜索,因为我已经有了处理数据的其余代码,.,, .. 非常感谢
  • @joe 我还有一个问题,已编辑问题的详细信息,谢谢
猜你喜欢
  • 1970-01-01
  • 2011-12-02
  • 2012-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-10
  • 2012-07-16
  • 1970-01-01
相关资源
最近更新 更多