$value){ $filetns[$row]=ltrim(rtrim($value)); } foreach($filetns as $row => $value){ if(substr($value,0,1) == "#") continue; $charcount = count_chars($value); $openbracket += $charcount[ord('(')]; $closebracket += $charcount[ord(')')]; if(($openbracket == $closebracket) && $openbracket != 0){ $servers = array_merge(TNSparseServer("(".$line.")") , $servers); $openbracket = 0; $closebracket = 0; $line = ""; } else { $line = $line . $value; } } return array_reverse($servers, true); } function TNSparseServer($serverstring){ preg_match_all('/([\(][^\(]{1,}[\=][^\(]{0,})/',$serverstring,$preparse ); if(count($preparse[0]) == 0) return Array(); //print_r($preparse); /* Contiene i puntatori ai livelli */ $levelarray = Array(); /* Contiene la struttura parsata */ $serverdef = &$levelarray[0]; $depthlevel = -1; foreach($preparse[0] as $parsedline){ $parsedline = rtrim($parsedline); $charcount = count_chars($parsedline); $depthlevel += $charcount[ord('(')]; if(!preg_match('/[^\(][\=][^\)]/',$parsedline)){ /* Controllo e prendo la chiave */ preg_match_all('/[\(]{1,}([^\(]{1,})[\=]/',$parsedline,$match); if(count($match) != 2) die("internal error parser: 1"); if($charcount[ord('(')] > 0 ) { /** Duplicato ? **/ if(is_array($levelarray[$depthlevel]) && array_key_exists(trim($match[1][0]),$levelarray[$depthlevel])){ //echo "DUPLICATO -" .trim($match[1][0]); /* Records da migrare ? */ if(!array_key_exists("0",$levelarray[$depthlevel][trim($match[1][0])])){ $tmp = &$levelarray[$depthlevel][trim($match[1][0])]; unset($levelarray[$depthlevel][trim($match[1][0])]); $levelarray[$depthlevel][trim($match[1][0])] = Array(); array_push($levelarray[$depthlevel][trim($match[1][0])],$tmp); } /* Prepara directory */ array_push($levelarray[$depthlevel][trim($match[1][0])],Array()); $levelarray[$depthlevel+1] = &$levelarray[$depthlevel][trim($match[1][0])][count($levelarray[$depthlevel][trim($match[1][0])]) - 1 ]; } else { $levelarray[$depthlevel][trim($match[1][0])] = Array(); $levelarray[$depthlevel +1] = &$levelarray[$depthlevel][trim($match[1][0])]; } } } else { /* Record e Valore */ preg_match_all('/[\(]{1,}([^\(]{1,})[\=]([^\)]{1,})/',$parsedline,$match); if(count($match) != 3) die("internal error parser: 2"); $levelarray[$depthlevel][trim($match[1][0])] = trim($match[2][0]); } $depthlevel = $depthlevel-$charcount[ord(')')]; } return $levelarray[0]; } ?>