Hoi,
Ik heb echt een probleem van kleuterklas- / zandbakniveau maar ik kom er maar niet uit. Ik probeer een functie te maken die mijn debug-logs in een hierarchische structuur plaatst aan de hand van de debug_backtrace().
Een debuglog is een array die een message bevat, een timestamp, een type en een status. De arrays die debug_backtrace genereert zien er (versimpeld) bijv zo uit:
De volgorde is feitelijk omgekeerd: Het bestand die het 'diepst' in de hierarchy moet komen staat als eerste genoemd. Ik wil dit gaan herschrijven tot een array die ik maar even 'debugstructure' heb genoemd. Deze array moet alle debuglogs gaan bevatten en hierarchisch structureren. In het genoemde voorbeeld:
De functie die ik heb gemaakt:
Ik vind em nog niet helemaal sexy, maar hij werkt gedeeltelijk: De hierarchie wordt correct opgebouwd. Probleem is alleen dat bij het schrijven naar debugstructure alle vorige info van file $kt wordt overschreven. Ik voel aan mn water dat ik hier een recursieve functie moet gaan gebruiken, maar hoe?
Even simpeler: Ik probeer dus een functie te maken waar je een array instopt, die die array als het ware 'optelt' bij een bestaande array, zonder dat er info van de bestaande array verloren gaat.
Ik heb echt een probleem van kleuterklas- / zandbakniveau maar ik kom er maar niet uit. Ik probeer een functie te maken die mijn debug-logs in een hierarchische structuur plaatst aan de hand van de debug_backtrace().
Een debuglog is een array die een message bevat, een timestamp, een type en een status. De arrays die debug_backtrace genereert zien er (versimpeld) bijv zo uit:
code:
1
2
3
4
5
6
| [0] - [file]=>"debugger.php" - [line]=>"10" [1] - [file]=>"docbuilder_html.php" [line]=>"15" [2] - [file]=>"index.php" [line]=>"5" |
De volgorde is feitelijk omgekeerd: Het bestand die het 'diepst' in de hierarchy moet komen staat als eerste genoemd. Ik wil dit gaan herschrijven tot een array die ik maar even 'debugstructure' heb genoemd. Deze array moet alle debuglogs gaan bevatten en hierarchisch structureren. In het genoemde voorbeeld:
code:
1
| $this->debugstructure[index.php][5][docbuilder_html.php][15][debugger.php][10] = $debuglog; |
De functie die ik heb gemaakt:
PHP:
1
2
3
4
5
6
7
8
9
10
11
| private function parse_log($text, $result, $type, $timestamp, $backtrace) { #init $temp = array("text"=>$text, "result"=>$result, "type"=>$type, "timestamp"=>$timestamp); foreach ( $backtrace as $vbt ) { $struct[] = array("file"=>$vbt['file'], "line"=>$vbt['line']); } #build structure foreach ( $struct as $vs ) { $temp = array($vs['file']=>array($vs['line']=>$temp)); } foreach ( $temp as $kt=>$vt ) { $this->debugstructure[$kt] = $vt; } } |
Ik vind em nog niet helemaal sexy, maar hij werkt gedeeltelijk: De hierarchie wordt correct opgebouwd. Probleem is alleen dat bij het schrijven naar debugstructure alle vorige info van file $kt wordt overschreven. Ik voel aan mn water dat ik hier een recursieve functie moet gaan gebruiken, maar hoe?
Even simpeler: Ik probeer dus een functie te maken waar je een array instopt, die die array als het ware 'optelt' bij een bestaande array, zonder dat er info van de bestaande array verloren gaat.
[ Voor 5% gewijzigd door xilent_xage op 09-03-2009 09:29 . Reden: even simpeler ]