public static function &exec(&$el, $callback, &$_group = null, $_key = null) { //Бежим по массиву рекурсивно [1, [3, 4], 3] if (Each::isAssoc($el) === false) { for ($i = 0, $l = sizeof($el); $i < $l; $i++) { $r =& Each::exec($el[$i], $callback, $el, $i); if (!is_null($r)) { return $r; } } } elseif (!is_null($el)) { //Если undefined callback не вызывается, Таким образом можно безжать по переменной не проверя определена она или нет. $r =& $callback($el, $_key, $_group); return $r; } else { return $el; } return $r; }
$r = null; $counter++; if ($counter === 3) { assert(6 === $b); } return $r; }); assert(4 === $counter); $counter = 0; $el = 1; Each::exec($el, function &() use(&$counter) { $r = null; $counter++; return $r; }); assert(1 === $counter); $el = 'test'; Each::exec($el, function &() use(&$counter) { $r = null; $counter++; return $r; }); assert(2 === $counter); $el = ['name' => 'oduvanio', 'email' => 'mail']; Each::exec($el, function &() use(&$counter) { $r = null; $counter++; return $r; }); assert(3 === $counter); echo '{"result": 1}';
$el = ['oduvanio', 'mail']; Each::exec($el, function () use(&$counter) { $counter++; }); assert(2 === $counter); $counter = 0; $el = [2, [4, 6], 5]; Each::exec($el, function ($b) use(&$counter) { $counter++; if ($counter === 3) { assert(6 === $b); } }); assert(4 === $counter); $counter = 0; $el = 1; Each::exec($el, function () use(&$counter) { $counter++; }); assert(1 === $counter); $el = 'test'; Each::exec($el, function () use(&$counter) { $counter++; }); assert(2 === $counter); $el = ['name' => 'oduvanio', 'email' => 'mail']; Each::exec($el, function () use(&$counter) { $counter++; }); assert(3 === $counter); echo '{"result": 1}';