Фильтр PHP частично соответствует элементам массива - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть массив, который содержит несколько элементов (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.

1 Ответ

0 голосов
/ 04 декабря 2018

Ты угадаешь правильно.Вы можете использовать регулярное выражение:

$images = array_filter($urls, function($url) use ($string) {
    return preg_match("~^.*/$string(-\d+)?/?$~", $url);
});

Регулярное выражение ищет последний путь, содержащий $string с необязательным начальным шаблоном -[0-9].Таким образом, URL-адрес, такой как http://localhost/path/sub-path/YOUR-STRING-01/, пройдет.

Примечание. Если $string поступает из ненадежного источника, введите preg_quote().

...