У меня есть любой массив данных "example.com/imports", "example.com/var", "example.com/js"
Я хочу удалить все URL, которые содержат это для карты сайта.
Некоторые из моих данных URL похожи на следующие
"example.com/imports/product.html",
"example.com/imports/product1.html",
"example.com/var/cache/5t46fdgdyg7644gfgfdgr",
"example.com/js/scripts.js"
У меня есть этот код
for ($i = 0; $i <= count($urls); $i++) {
$url = $urls[$i];
if (in_array($url, $remove_urls)) {
// found remove url
}else{
echo $url;
}
}
Однако это только удаляет, если URL-адрес является точным соответствием, таким как "example.com/imports"
Есть ли способ проверить начало?
Вместо in_array($url, $remove_urls)
попробуй использовать strpos
:
foreach ($urls as $url) {
$remove = false;
// loop $remove_urls and check if $url starts with any of them
foreach ($remove_urls as $remove_url) {
if (strpos($url, $remove_url) === 0) {
$remove = true;
break;
}
}
if ($remove) {
// remove url
} else {
echo $url;
}
}
Вы можете использовать функцию preg_grep следующим образом:
$urls = ['imports', 'var', 'js'];
$url_pattern = '/example.com\/(' . implode('|', $urls) . ')\/.*/';
$removed = preg_grep($url_pattern, $remove_urls);
Вот пример.