循环在哪里?

时间:2017-10-28 16:47:35

标签: php arrays loops

我有这段代码:

function filterVencimientos ($arrayFull) {
    $filtered = array_filter($arrayFull, 'month');
    var_dump($filtered);
    return $filtered;
}

function month ($var) {
    $response = false;
    if (is_array($var)) {
        foreach ($var as $item) {
            $response = month($var);
        }
    } else {
        $date = date('Y-m');
        $response = (stripos($var, $date) !== false);
    }
    return $response;
}

function getFiltered () {
    $arrayFull = getVencimientosPorPerfil();
    $arrayFiltered = filterVencimientos($arrayFull);
    return $arrayFiltered;
}

然后返回:

Fatal error: Out of memory (allocated 4194304) (tried to allocate 262144 bytes) in C:\xampp\htdocs\app\miramonteapp\api\yscript.php on line 244

我正在尝试通过这个数组:

array(1) {
  [258]=>
  array(9) {
    ["recaudacion"]=>
    array(13) {
      [0]=>
      string(10) "2017-01-07"
      [1]=>
      string(10) "2017-02-07"
    }
    ["Contribuyentes Convenio Multilateral"]=>
    array(13) {
      [0]=>
      string(10) "2017-01-13"
      [1]=>
      string(10) "2017-02-13"
    }
  }
}

导致内存不足错误的循环在哪里?

1 个答案:

答案 0 :(得分:1)

您的错误位于foreach函数中的month()内:

$response = month($var);

您应该在month()变量上运行$item函数。

这是糟糕的编译器试图做的事情:

    使用month() 数组调用
  1. $var
  2. 循环浏览$var
  3. 的所有元素
  4. 使用与传入的完全相同的参数调用month()
  5. month()被称为......等。
  6. 步骤4与步骤1相同,因此编译器勇敢地继续尝试运行代码,这只是一遍又一遍地运行相同的功能:'(