【问题标题】:search string value in array values recursively?递归搜索数组值中的字符串值?
【发布时间】:2019-03-09 08:30:33
【问题描述】:

新的递归事物,我想创建搜索引擎依赖于用户输入的值,并从数组值中获取用户输入的所有单词

例如我有这个数组:

$array = array('it', 'pro', 'gram', 'mer', 'programmer');
$string = "itprogrammer";

抱歉语法错误。如果有人可以提供帮助,我将不胜感激。谢谢你的帮助。

【问题讨论】:

  • 为什么需要递归?
  • 我看不出它是如何递归的。通常递归是当数组是多维的时候,这是一个平面数组。
  • @Andreas 感谢您的解释。那么在平面阵列中这样做有可能还是不可能?
  • 正如我所说,我不知道如何在平面数组上进行递归。也许这是可能的。但我不明白为什么它应该是递归的。

标签: php arrays recursion search


【解决方案1】:

您可以使用array_filter 过滤掉数组中不是$string 子字符串的任何值。请注意,我使用stripos 进行不区分大小写的搜索,如果您希望搜索区分大小写,只需改用strpos

$array = array('pro', 'gram', 'merit', 'program', 'it', 'programmer'); 
$string = "programit";
print_r(array_filter($array, function ($v) use($string) { return stripos($string, $v) !== false; }));

输出:

array
(
    [0] => pro
    [1] => gram
    [3] => program
    [4] => it
)

更新

这是一个给出相同结果的递归函数。

function find_words($string, $array) {
    if (count($array) == 0) return $array;
    if (stripos($string, $array[0]) !== false)
        return array_merge(array($array[0]), find_words($string, array_slice($array, 1)));
    else
        return find_words($string, array_slice($array, 1));
}

rextester上演示这两种方法

【讨论】:

  • 你错过了“我希望是 'pro,gram,it'”
  • @IhsanDn 这不是一个非常适合递归的问题,因为您需要一一处理 $array 中的值。
  • @IhsanDn 顺便说一下,我根据您的原始数据在我的答案中添加了一个递归函数。
  • @IhsanDn 如果你想输出由<br>分隔的值,你可以echo implode('<br>', find_words($string, $array));
  • @IhsanDn 查看我的编辑,我在rextester 上包含了一个在 PHP7 上运行的两个版本的演示链接。
猜你喜欢
  • 2015-09-28
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 2019-10-30
  • 2014-10-26
  • 1970-01-01
  • 2021-12-17
相关资源
最近更新 更多