PHP在数组中查找字符串?
我有一个字符串(url路径),比如PHP在数组中查找字符串?,php,Php,我有一个字符串(url路径),比如/recipes/cheese/cheese-meat-loaf,我有一个巨大的路径数组,比如 '/recipes/', '/content/' ... 我想获取路径并在数组中找到与部分路径匹配的路径。因此,对于本例,它将匹配数组中的/recipes/,因为路径包含/recipes/,但数组也可能包含/recipes/cheese/,在这种情况下,它应该匹配该路径 所以我很想通过路径减去/之间的所有内容,然后尝试匹配它。。。这样就可以了 `/recipes/c
/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"
)
你也可以分解奶酪肉糕。既然我们不是来为你编码的,让我给你写一个“食谱”,让你自己写代码。然后,如果你在过程中遇到问题,你可以回到这里,提出一个更具体的问题,我们可以更好地帮助你
对路径数组进行排序,使最长路径排在第一位。然后只需完成并返回第一个匹配项:
$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