[PHP] Rekursion $GLOBALS, aber wie?

Benutzer-621

abgemeldet
20 April 2006
744
64
Moin,
Ich möchte alles was in $GLOBALS ist verarbeiten, aber ich hab keine Ahnung wie ich es machen soll, bei Google bisher auch nichts gefunden. Habe mal unteres erstellt, aber es funzt net so wirklich. Mit print_r() kann ich nichts anfangen, da es so nur ausgegeben wird und nicht verarbeitet werden kann. Irgendwo, muss denk ich Schluß sein bevor $GLOBALS nochmals eingelesen wird und so ne Endlos-Schleife entsteht.

PHP:
  function globale($arr) {

    foreach($arr AS $key => $value) {
      echo($key." => ".$value."<br>");
      if(is_array($key)) {

        globale($key);

      }
    }
  }

globale($GLOBALS);
Ausgabe:

PHP:
HTTP_POST_VARS => Array
_POST => Array
HTTP_GET_VARS => Array
_GET => Array
HTTP_COOKIE_VARS => Array
_COOKIE => Array
HTTP_SERVER_VARS => Array
_SERVER => Array
HTTP_ENV_VARS => Array
_ENV => Array
HTTP_POST_FILES => Array
_FILES => Array
_REQUEST => Array
GLOBALS => Array
 
Zuletzt bearbeitet:
Bei mir zeigt PHP 5 bei einem print_r($GLOBALS) folgendes an:
Code:
Array
(
    [GLOBALS] => Array
 *RECURSION*
[...]
D.h., du musst den key "GLOBALS" filtern, sodass dieser nicht wieder neu aufgerufen wird.

Asonsten ist in deinem Script noch nen kleiner Fehler: Du überprüfst immer, ob der $key ein array ist. ==> Du musst überprüfen, ob das $value ein array ist.
Das sieht dann ungefähr so aus:
Code:
<?php
function globale($arr) { 
    foreach($arr AS $key => $value) { 
      echo($key.' => '.$value.'<br>'); 
      if(is_array($value) && !($key == 'GLOBALS')) { 

        globale($value); 

      } 
    } 
  } 

globale($GLOBALS);
?>
 
Du kannst doch trotzdem print_r benutzen.Du musst halt die Form print_r($var, true); verwenden. Das true als 2. Parameter unterdrückt die sofortige Ausgabe.
 
burnred schrieb:
Du kannst doch trotzdem print_r benutzen.Du musst halt die Form print_r($var, true); verwenden. Das true als 2. Parameter unterdrückt die sofortige Ausgabe.
Wenn deine PHP-Version das noch nicht unterstützt, kannst du ja OB anschalten ;)
PHP:
//...
ob_start();
print_r($irgendwas);
$printr_ausgabe=ob_get_contents();
ob_end_clean();
//...
 
burnred schrieb:
Du kannst doch trotzdem print_r benutzen.Du musst halt die Form print_r($var, true); verwenden. Das true als 2. Parameter unterdrückt die sofortige Ausgabe.

OK, thx dann mal, hatte ich gar nicht gewusst das es so geht, weil ich erst ewig mit print_r rumprobiert hatte :D.
 
Moin,
möcht mich nochmals melden :D. Also ich muss doch alles, jede Zeile einzeln ausgeben, dass funzt leider mit print_r nicht :(. Hat jemand vllt. ne Idee, weil hab schon einiges versucht.