使用array_filter和foreach,错误

时间:2015-01-20 06:30:14

标签: php array-filter

我有一个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)

任何人都可以建议任何解决方案

我审核了thisthis,但无法通过解决方案 三江源

1 个答案:

答案 0 :(得分:3)

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

<强> Fiddle

当然,您可以改进它并使用更少的代码,但这会为您提供方向。