【问题标题】:With array_filter and foreach , error使用 array_filter 和 foreach ,错误
【发布时间】:2015-01-20 06:30:13
【问题描述】:

我有 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 但无法通过解决方案 谢谢你

【问题讨论】:

    标签: php array-filter


    【解决方案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";
    }
    

    Fiddle

    当然你可以改进它并使用更少的代码,但这会给你一个方向。

    【讨论】:

    • 我如何传递$final_check 值?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-09
    • 2011-04-23
    • 1970-01-01
    • 2014-10-20
    • 2012-06-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多