public static function merge(&$layer, &$external, $i) { //Используется в configinherit if (infra_isEqual($external[$i], $layer[$i])) { //Иначе null равено null но null свойство есть и null свойства нет разные вещи } elseif (isset(static::$props[$i])) { $func = static::$props[$i]; while (is_string($func)) { //Указана не сама обработка а свойство с такойже обработкой $func = static::$props[$func]; } $layer[$i] = call_user_func_array($func, array(&$layer[$i], &$external[$i], &$layer, &$external, $i)); } else { if (is_null($layer[$i])) { $layer[$i] = $external[$i]; } } }
function xls_processGroupFilter(&$data) { $all = array(); xls_runGroups($data, function (&$gr) use(&$all) { $title = infra_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 infra_Fix('del'); } }); infra_foro($all, function (&$des) { infra_forr($des['list'], function &(&$gr) use($des) { xls_merge($des['orig'], $gr); infra_forr($gr['parent']['childs'], function &(&$g) use(&$gr) { if (infra_isEqual($g, $gr)) { return new \infra_Fix('del', true); } $r = null; return $r; }); $r = null; return $r; }); $r = null; return $r; }); /*//$cat=$data['childs'][0]; $cat=$data; unset($cat['parent']); infra_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); */ }