С array_filter и foreach, ошибка

У меня есть 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)

Может ли кто-нибудь предложить какое-либо решение

я рефери этот а также этот но не может пройти через решение
Спасибо

1

Решение

 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";
}

скрипка

Конечно, вы можете улучшить его и использовать меньше кода, но это дает вам направление.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]