function flatten_traits($profile_json_str) { $profile_obj = json_decode($profile_json_str, true); $list = array(); flatten_tree($profile_obj['tree'], 0, $list); return $list; }
function flatten_tree($data,$removeChildren=false){ $output=array(); foreach($data as $id=>$item){ if(isset($item['node:children']) && count($item['node:children'])){ $children=flatten_tree($item['node:children']); $output=$output+$children; } if($removeChildren===true) unset($item['node:children']); if(!isset($output[$item['node:address']])) $output[$item['node:address']]=$item; } return $output; }
if(isset($thisItem['pattern:match'])){ $patternData=$tree->get($thisItem['pattern:match'],2); $patternItem=pull_item($patternData); $patternFlat=flatten_tree($patternData); if(isset($patternItem['type']) && $patternItem['type']==='recursive') $childTypes[$patternItem['node:name']]=$patternItem; }elseif(isset($thisItem['pattern:children'])){ if(substr($thisItem['pattern:children'],-1)!=='/'){ //1 pattern type insertable $patternChildren=$tree->get($thisItem['pattern:children'],2); $patternItem=array('node:children'=>$patternChildren); $patternFlat=flatten_tree($patternChildren); }else{ //multiple pattern types $patternData=$tree->get($thisItem['pattern:children'],2); $patternItem=array('node:children'=>$patternData); $patternFlat=flatten_tree($patternData); } } foreach($patternItem['node:children'] as $patKey=>$patVal){ if(isset($patVal['type']) && in_array($patVal['type'],array('array','recursive'))){ if(!isset($patVal['enable-insert'])){ $childTypes[$patKey]=$patVal; }else{ $inserters=explode(',',$patVal['enable-insert']); //cross check it! foreach($inserters as $cId){ if(in_array(trim($cId)*1,$accessId)){ $childTypes[$patKey]=$patVal; } }