public static function &exec(&$layers, $callback, &$parent = null) { $props =& static::$props; $r =& Each::exec($layers, function &(&$layer) use(&$parent, $callback, $props) { $r =& $callback($layer, $parent); if (!is_null($r)) { return $r; } $r =& Each::foro($layer, function &(&$val, $name) use(&$layer, $callback, $props) { $r = null; if (isset($props['list'][$name])) { $r =& Run::exec($val, $callback, $layer); if (!is_null($r)) { return $r; } } else { if (isset($props['keys'][$name])) { $r =& Each::foro($val, function &(&$v, $i) use(&$layer, $callback) { return Run::exec($v, $callback, $layer); }); if (!is_null($r)) { return $r; } } } return $r; }); return $r; }); return $r; }
$src = str_replace('..', '-', $src); if (strlen($src) > 100) { $src = md5($src); } $src = $dir . 'seo-' . $src . '.json'; if (!$submit) { $seo = Load::loadJSON($src); $ans['seo'] = $seo; } else { $dir = autoedit_createPath($dir); $seo = $_POST['seo']; $def = $_POST['def']; $keys = array(); Each::foro($seo, function ($val, $key) use(&$seo, &$def, &$keys) { if ($seo[$key] == $def[$key]) { return; } $keys[$key] = $val; }); if (sizeof($keys) == 0) { $r = unlink($src); } else { $keys['page'] = $id; $keys['time'] = time(); $r = file_put_contents($src, Load::json_encode($keys)); } if ($r) { return Ans::ret($ans, 'SEO-данные сохранены'); } return Ans::err($ans, 'Ошибка. SEO-данные не сохранены'); } } elseif ($type === 'corfile') {
function xls_processGroupFilter(&$data) { $all = array(); xls_runGroups($data, function &(&$gr) use(&$all) { $title = mb_strtolower($gr['title']); //echo $title.'<br>'; if (!isset($all[$title])) { $all[$title] = array('orig' => &$gr, 'list' => array()); } else { //Ну вот и нашли повторение $all[$title]['list'][] =& $gr; //xls_merge($all[$title],$gr); //у некой прошлой группы появляются новые childs.. но мы всё ещё бежим по какому-то его childs и новые добавленные будут проигнорированны //return new Fix('del'); } $r = null; return $r; }); Each::foro($all, function &(&$des) { Each::forr($des['list'], function &(&$gr) use($des) { xls_merge($des['orig'], $gr); Each::forr($gr['parent']['childs'], function &(&$g) use(&$gr) { if (Each::isEqual($g, $gr)) { $r = new Fix('del', true); return $r; } $r = null; return $r; }); $r = null; return $r; }); $r = null; return $r; }); /*//$cat=$data['childs'][0]; $cat=$data; unset($cat['parent']); Each::forr($cat['childs'],function(&$g){ //if(!is_string($g['parent'])) $g['parent']=&$g['parent']['title']; //unset($g['parent']); $g['childs']=sizeof($g['childs']); $g['data']=sizeof($g['data']); }); echo '<pre>'; print_r($cat); exit; /* xls_runGroups($data,function(&$gr,$i,&$group){//Удаляем пустые группы if(!$group) return;//Кроме верхней группы if(!sizeof($gr['childs'])&&!sizeof($gr['data'])){ array_splice($group,$i,1); } },array(),true); */ }
} //obj back ret $ar = array('a' => 111, 'b' => 222, 'c' => 333, 'e' => 444); $count = 0; Each::foro($ar, function ($v, $key) use(&$count) { ++$count; if ($key == 'b') { return new Fix('del', true); } }, true); if ($count == 3 && sizeof($ar) == 3 && !isset($ar['b'])) { } else { $result = false; } //obj ret $ar = array('a' => 111, 'b' => 222, 'c' => 333, 'e' => 444); $count = 0; Each::foro($ar, function ($v, $key) use(&$count) { ++$count; if ($key == 'b') { return new Fix('del', true); } }); if ($count == 2 && sizeof($ar) == 3 && !isset($ar['b'])) { } else { $result = false; } if (!$result) { return Ans::err($ans, 'err'); } return Ans::ret($ans, 'ret');