Tom: Array Dimensionen ermitteln

Beitrag lesen

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