Johanna: Mehrdymensionales Array sortieren [Anfängerin]

Hallo,

ich bereite mich gerade auf die Computerstunde vor. Wir haben vor kurzem begonnen mit PHP und Arrays zu arbeiten.
Jetzt sind wir bei Mehrdymensionalen Array's angekommen. Beispiel:

$datensatz[] = array('PLZ' => "65465",  
                  'Ort'   => "Wangen",  
                  'Stadtteil'  => "egal1");  
  
$datensatz[] = array('PLZ' => "65465",  
                  'Ort'   => "Wangen",  
                  'Stadtteil'  => "egal1");  
  
$datensatz[] = array('PLZ' => "65465",  
                  'Ort'   => "Wangen",  
                  'Stadtteil'  => "egal2");  
  
$datensatz[] = array('PLZ' => "65465",  
                  'Ort'   => "Wangen",  
                  'Stadtteil'  => "egal3");  
  
$datensatz[] = array('PLZ' => "65465",  
                  'Ort'   => "Wangen",  
                  'Stadtteil'  => "egal3");

Wenn ich nun wissen möchte wieviele Stadtteile es gibt würde ich array_unique auf den Stadtteil machen? Oder welche Möglichkeiten gibt es hierfür?

  1. Tach!

    Jetzt sind wir bei Mehrdymensionalen Array's angekommen. Beispiel:

    Ich halte es für einen Fehler, bei solchen Datensatz-Arrays von mehrdimensional zu sprechen. Dimensional ist für mich etwas, das fortlaufend in eine bestimmte Richtung strebt. Das ist bei Key-Value-Paaren nicht der Fall. Es sind einfach nur verschachtelte Arrays. Aber egal.

    $datensatz[] = array('PLZ' => "65465",
                      'Ort'   => "Wangen",
                      'Stadtteil'  => "egal1");

    Wenn ich nun wissen möchte wieviele Stadtteile es gibt würde ich array_unique auf den Stadtteil machen? Oder welche Möglichkeiten gibt es hierfür?

    Nicht direkt. Du kannst array_unique() nur auf ein einzelnes Array anwenden. Du willst aber aus den vielen Arrays in $datensatz immer nur ein Element auswerten. Zunächst musst du die Stadteil-Felder separieren, dann erst kannst du array_unique() anwenden. Dazu kannst du mit array_map() durchlaufen und von der Callback-Funktion nur den Stadtteil zurückgeben lassen. Dann hast du ein Array, das du durch array_unique() schicken kannst. Da du aber sowieso durch das Array laufen musst, kannst du das auch gleich zu Fuß machen, und für jeden Stadtteil ein Feld in einem neuen Array anlegen. Von diesem musst du nun noch mit count() die Elemente zählen.

    $stadtteile = array();
    foreach ($datensatz as $einer) // $datensatz ist ein unglücklicher Name für eine Ansammlung von mehreren Datensätzen
      $stadtteile[$einer['Stadtteil']] = 1;

    Der Wert 1 hat hier keine Bedeutung. Ein Element braucht aber immer einen Wert. Hier kommt es nur darauf an, dass bei gleichen Stadtteilnamen immer das gleiche Element angelegt oder nochmal überschrieben wird. Am Ende ist pro Stadtteil ein Element vorhanden.

    Ich nehme an, dass du nur die Gesamtanzahl der Stadtteile wissen wolltest und das nicht auch noch nach anderen Kriterien gruppiert haben wolltest.

    dedlfix.