我有一个数组,其中包含多个具有相似名称的元素(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。
>答案 0 :(得分:1)
你猜对了。您可以使用正则表达式:
$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()
。