PHP 过滤部分匹配的数组元素
PHP Filter partially matched array elements
我有一个数组,其中包含多个具有相似名称的元素(URL 个)。
我正在使用 array_filter
来过滤包含特定字符串的元素。
$urls = $images;
$string = 'books-for-kids';
$images= array_filter( $urls, function( $url ) use ( $string ) {
return ( stripos( $url, $string ) !== FALSE );
});
下面是输出:
array(126) {
[51]=> string(103) “http://www.example.com/books-for-kids-to-print-90”
[52]=> string(107) “http://www.example.com/free-books-for-kids-to-print-1”
}
因为我要过滤的字符串在两个 URL 中,所以它们都匹配。
然而,这不是我正在寻找的输出。我只是想匹配第一个 URL.
我不太确定该怎么做,但我在想也许可以使用正则表达式来匹配“/string-[0-9]”(反斜杠字符串破折号任何数字)这样它只会首先匹配 URL.
你猜对了。您可以使用正则表达式:
$images = array_filter($urls, function($url) use ($string) {
return preg_match("~^.*/$string(-\d+)?/?$~", $url);
});
正则表达式查找包含 $string
的最后一个路径,并带有可选的前导 -[0-9]
模式。所以像 http://localhost/path/sub-path/YOUR-STRING-01/
这样的 URL 会通过。
注意:如果 $string
来自不受信任的来源,请对其执行 preg_quote()
。
我有一个数组,其中包含多个具有相似名称的元素(URL 个)。
我正在使用 array_filter
来过滤包含特定字符串的元素。
$urls = $images;
$string = 'books-for-kids';
$images= array_filter( $urls, function( $url ) use ( $string ) {
return ( stripos( $url, $string ) !== FALSE );
});
下面是输出:
array(126) {
[51]=> string(103) “http://www.example.com/books-for-kids-to-print-90”
[52]=> string(107) “http://www.example.com/free-books-for-kids-to-print-1”
}
因为我要过滤的字符串在两个 URL 中,所以它们都匹配。 然而,这不是我正在寻找的输出。我只是想匹配第一个 URL.
我不太确定该怎么做,但我在想也许可以使用正则表达式来匹配“/string-[0-9]”(反斜杠字符串破折号任何数字)这样它只会首先匹配 URL.
你猜对了。您可以使用正则表达式:
$images = array_filter($urls, function($url) use ($string) {
return preg_match("~^.*/$string(-\d+)?/?$~", $url);
});
正则表达式查找包含 $string
的最后一个路径,并带有可选的前导 -[0-9]
模式。所以像 http://localhost/path/sub-path/YOUR-STRING-01/
这样的 URL 会通过。
注意:如果 $string
来自不受信任的来源,请对其执行 preg_quote()
。