Muckel: Array erkennen

Hallo..
Gibt es eine Möglichkeit abzufragen wieviel Dimensionen ein Array hat, bzw. ob es ein- oder zweidimensional ist?
Konnte da bisher nichts finden.. Zur Not würde ich mir selbst was basteln aber wäre schön wenns dafür was gäbe..

  1. Hallo Muckel,

    Gibt es eine Möglichkeit abzufragen wieviel Dimensionen ein Array hat, bzw. ob es ein- oder zweidimensional ist?
    Konnte da bisher nichts finden.. Zur Not würde ich mir selbst was basteln aber wäre schön wenns dafür was gäbe..

    Es gibt die Funktion is_array(). Mit ein paar Schleifen kannst du dir eine Überprüfung auf die Dimensionen eines Arrays zusammenschreiben - bedenke dabei, dass in PHP nicht alle Einträge eines Arrays wieder Arrays sind, sondern auch andere Werte sein können.

    Beispiel:

      
    $myArray = Array(  
        Array('wert'),  
        0,  
        Array('anderer wert')  
    );  
    
    

    Ist dieses Array nun ein- oder zweidimensional? Oder vielleicht doch etwas anderes? ;)

    Grüße

    Marc Reichelt || http://www.marcreichelt.de/

    --
    Linux is like a wigwam - no windows, no gates and an Apache inside!
    Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
    http://emmanuel.dammerer.at/selfcode.html
  2. Hallo Muckel,

    Gibt es eine Möglichkeit abzufragen wieviel Dimensionen ein Array hat, bzw. ob es ein- oder zweidimensional ist?

    Diese Frage lässt sich nicht so einfach beantworten, da ein PHP-Array kein Array im eigentlichen Sinne ist. "Mehrdimensionale" Arrays in PHP können am sinnvollsten mit einer Baumdarstellung beschrieben werden.

    Schöne Grüße,

    Johannes

    --
    WM-Tippspiel: http://zeller-johannes.de/wmtipp/
    ie:% fl:( br:< va:| ls:[ fo:) rl:) n4:? ss:| de:] js:| ch:} sh:) mo:| zu:)
  3. Hello,

    wie Johannes schon postete, sind "Arrays" in PHP eigentlich verkettete Listen. Die einzelnen Elemente der Liste tragen den Index, den Wert, und die Zeiger auf Vorgänger und Nachfolger. Anstelle eines Wertes können sie auch einen Anker für eine "Abzweigung" tragen, werden dadurch also zum Knoten.

    "Eindimensional":

    "Mehrdimensional":

    Um die Anzahl der "Dimensionen" festzustellen, müsste man also sinnvollerweise ein rekursive Funktion schreiben, die die Ketten abläuft, die aktuelle und die maximal gefundene "Diminesion" mitführt.

    <?php   ### array_dimension.php ###

    function array_dimension($_var,$dim = 0)
    {
      $thisdim = $dim;
      if(is_array($_var))
      {
        $dim++;
        foreach($_var as $key => $val)
        {
          $thisdim = max($thisdim,array_dimension($val,$dim));
        }
      }
      # Degug only, schalt echo mal ein, um zu sehen, was passiert
      # echo "$_var : $dim<br>";
      #-----------
      return $thisdim;
    }
    #------------------------------------------------------------------------------

    Verzweigtes Array erzeugen

    $_test = array();

    $_test[1] = 'Eins';
    $_test[2] = 'zwei';
    $_test[3] = 'dry';
    $_test[5] = 'Four';
    $_test[6] = 'Sieben';

    $_test1 = $_test;
    $_test[4] = $_test1;

    $_test1 = $_test;
    $_test[0] = $_test1;

    $_test1 = $_test;
    $_test[7] = $_test1;

    Kontrollausgabe

    echo "<pre>\n";
    print_r($_test);
    echo "</pre>\n";

    Echo "Dimensionen = ".array_dimension($_test);

    ?>

    Do könnte es funktionieren.

    Bei der Gelegenheit noch eine Bemerkung zum Array.

    Die Zuweisung $_test[0] = $_test wäre nicht möglich, da PHP hier nicht mit einer Kopie des Arrays arbeitet, wie es bei Skalaren üblich wäre, sondern mit dem Original. Und das verändert sich während des Einfügens. Es ergäbe also auch eine Rekursion. Deshalb vorher das (temporäre) Kopieren des Arrays $_test nach $_test1.

    Harzliche Grüße vom Berg
    http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau