У меня есть 2 массива как
$check_string = array("www.salmat.", "www.webcentral.", "abpages.");
а также
$files = array("http_www.salmat.com.au_.png", "http_www.webcentral.com.au_.png");
А теперь я хочу проверить, если значение каждого элемента в массиве $check_string matches
по крайней мере часть строки каждого элемента массива $files
и если он не совпадает, то я выведу соответствующие значения $ check_string.
Так что я делаю с array_filter
функция
foreach ($check_string as $final_check)
{
function my_search($haystack)
{
global $final_check;
$needle = $final_check;
return(strpos($haystack, $needle));
}
$matches[] = array_filter($files, 'my_search');
if(empty($matches))
{
echo $final_check;
echo "</br>";
}
}
Но с этим кодом я получаю ошибку
Fatal error: Cannot redeclare my_search() (previously declared in same file)
Может ли кто-нибудь предложить какое-либо решение
я рефери этот а также этот но не может пройти через решение
Спасибо
function my_search($haystack)
{
global $final_check;
$needle = $final_check;
return(strpos($haystack, $needle));
}
Эта функция должна быть определена вне петля. И вы можете просто позвонить снова и снова в цикле. В настоящее время вы пытаетесь переопределить его на каждой итерации цикла.
Не буду предлагать дальнейшие исправления к вашему коду, поскольку его логика не очень хороша. Вы можете попробовать что-то вроде этого
$check_string = array("www.salmat.", "www.webcentral.", "abpages.");
$files = array("http_www.salmat.com.au_.png", "http_www.webcentral.com.au_.png");
foreach($check_string as $check)
{
$found=FALSE;
foreach($files as $file)
{
if(stristr($file,$check)!==FALSE)
$found=TRUE;
}
if(!$found)
echo $check,"\n";
}
Конечно, вы можете улучшить его и использовать меньше кода, но это дает вам направление.
Других решений пока нет …