PHP在数组中查找字符串?

PHP在数组中查找字符串?,php,Php,我有一个字符串(url路径),比如/recipes/cheese/cheese-meat-loaf,我有一个巨大的路径数组,比如 '/recipes/', '/content/' ... 我想获取路径并在数组中找到与部分路径匹配的路径。因此,对于本例,它将匹配数组中的/recipes/,因为路径包含/recipes/,但数组也可能包含/recipes/cheese/,在这种情况下,它应该匹配该路径 所以我很想通过路径减去/之间的所有内容,然后尝试匹配它。。。这样就可以了 `/recipes/c

我有一个字符串(url路径),比如
/recipes/cheese/cheese-meat-loaf
,我有一个巨大的路径数组,比如

'/recipes/',
'/content/'
...
我想获取路径并在数组中找到与部分路径匹配的路径。因此,对于本例,它将匹配数组中的
/recipes/
,因为路径包含/recipes/,但数组也可能包含
/recipes/cheese/
,在这种情况下,它应该匹配该路径

所以我很想通过路径减去
/
之间的所有内容,然后尝试匹配它。。。这样就可以了

`/recipes/cheese/cheese-meat-loaf` then if not found
`/recipes/cheese/` then if not found
`/recipes/` then if not found
return default
它将返回巨型数组中的值(关键是路径)

我想让它倒过来,因为我只想要一个值,可能有多个
/recipes/*/


但我不确定该怎么做。

尝试通过切断最后一个/来缩短循环中的URL,并使用该值在数组中搜索:

$arr = array([with many elements]);
$url = '/recipes/cheese/cheese-meat-loaf';
$found = false;
while ($found === false && $url !== '') {
  if (in_array($url, $arr)) $found = $url;
  else {
    $shorten = preg_replace('/(\/[^\/]*)$/', '', $url);
    if ($shorten === $url) break;
    else $url = $shorten;
  }
}
echo $found !== false ? 'found: ' . $url : 'not found';

PHP中有一个名为
explode
的函数,它将字符串解释为片段。
explode(“/”,$inputstring)
将返回一个数组。例如:

explode("/",'/recipes/cheese/cheese-meat-loaf');

array(
    [0]=>"recipies"
    [1]=>"cheese"
    [2]=>"cheese-meat-loaf"
)

你也可以分解奶酪肉糕。

既然我们不是来为你编码的,让我给你写一个“食谱”,让你自己写代码。然后,如果你在过程中遇到问题,你可以回到这里,提出一个更具体的问题,我们可以更好地帮助你

  • 在数组中搜索当前搜索字符串
  • 如果找到它,则返回数组中的值
  • 如果尚未找到,请在搜索字符串中搜索最后一次出现的斜杠字符,并将其连同其后的所有内容一起删除
  • 使用新的搜索字符串从1开始

  • 对路径数组进行排序,使最长路径排在第一位。然后只需完成并返回第一个匹配项:

    $array = array(
        '/recipies',
        '/recipies/cheese'
        );
    
    $url = "/recipies/cheese/fondue";
    
    function lsort($a,$b){
        $diff = strlen($b) - strlen($a);
        return $diff;
    }
    
    usort($array,'lsort');
    
    foreach( $array as $path ){
        echo "Testing $path<br/>";
        if( !strncmp($url, $path, strlen($path)) ){    
           echo "Best match is $path</br/>";
           break;
        }
    }
    

    听起来递归函数的工作可能会对您有所帮助。是的,您可能希望对更简单的代码使用递归。@johncode这将是尾部递归的,所以在像php这样的命令式编程语言中,我不建议使用recursion.Loop和RegExp?但是如果你有
    /recipes/cheese/cheese肉糕
    /recipes/cheese肉糕
    ,会发生什么情况-你想退回哪一个?
    Testing /recipies/cheese
    Best match is /recipies/cheese