Передача функции по параметру и возврат значения

168
03 июля 2017, 19:49

Добрый день. Я новичок в php и поэтому уже сломал голову в понимании того, почему этот код не работает как надо. Есть 2 функции. Первая - это рекурсивный прогон по массиву, в которую мы передаем массив и вторую функцию, а вторая сравнивает значение на соответствие и возвращает 1 или 0.

function trace($arr, $func) {
  foreach ($arr as $el) {
      if (is_array($el)) {
          trace($el, $func);
      } else {
           print_r($el);
           $bff = $func($el);
           var_dump($bff);
           if ($bff) {
              return $bff;
           }
      }
  }
}
function sizeFlag($el) {
    if ($el >= 120) {
        return  1;
    } else {
       return 0;
    }
}
$bigFrameFlag = trace($modules, 'sizeFlag');
var_dump ($bigFrameFlag);

И сам массив:

$modules= array(
    array(
        'w' => 70,
        'h' => 60
    ),
    array(
        'w' => 80,
        'h' => 120
    ),
    array(
        'w' => 80,
        'h' => 120
    )
);

выводит - >

70 int(0) 60 int(0) 80 int(0) 120 int(1) 80 int(0) 120 int(1) 
NULL 

Не пойму почему на первом значении 120 код не прерывается и почему $bigFrameFlag = NULL.

Answer 1

ну 2 return'а там явно ни к чему, но я в принципе уже разобрался. первый else же не выполняется, а цепочка которая выполняется потом по рекурсии возвращает значение но никуда его не записывает. нужен просто счетчик, который будет прерывать цикл, при значении $counter = trace($el, $func); true p.s. тем более если просто поставить return как посоветовали, то он на второй итерации просто остановится.

READ ALSO
Отправка данных на email

Отправка данных на email

Здравствуйте, я пока что плохо разбираюсь в phpКто может помогите пожалуйста с кодом для обработки

243
Не видит переменную PHP

Не видит переменную PHP

Внизу например пишу

219
Не срабатывает метод if (isset($_POST

Не срабатывает метод if (isset($_POST

Добрый день, не могу разобратьсяПочему код не работает POST методом

191
Интервал проверки новых заказов в базе, WebSocket

Интервал проверки новых заказов в базе, WebSocket

Есть WS сервер, написан на Ratchet

180