Assoziatives Array sortieren anhand "Schlüssel-Array"

Caralynn

Mitglied
Hallo,

irgendwie stehe ich gerade mit meinen assoziativen Arrays auf dem Kriegspfad.

Ich habe einen kleinen Zufallsgenerator, der mir das Ergebnis 'durcheinander' zurueckgibt, bzw. nicht durcheinander, sondern nach dem Alphabet sortiert. Waere ja normalerweise schoen, aber brauch' ich nicht... ich brauche eine 'andere' Reihenfolge, die 'meinen' Regeln folgt, um mit den Daten spaeter noch arbeiten zu koennen (eine Art Mapping).

Ein "kleineres" Beispiel fuer die Problematik:


PHP:
// 
$ergebnisArray = array();
$ergebnisArray["Awert"] = array("W1"=>"Tschirp");
$ergebnisArray["Bwert"] = array("W4"=>"Tschorp");
$ergebnisArray["Cwert"] = array("W4"=>"Tscherp");
$ergebnisArray["Dwert"] = array("W4"=>"Tschurp");


$keyOrder = array("Awert","Dwert","Bwert","Cwert");
echo '<pre>',print_r($ergebnisArray),'</pre>';

foreach($keyOrder as $element) {
	echo $element."<br />";
}

$ergebnisArray enthaelt die Daten, wie sie zurueckkommen (aus einer Datenbank, dort moechte ich eigentlich eher ungerne einen "Sortierungsindex" ablegen).

Das Array $keyOrder enthaelt die Reihenfolge, in der ich sie gerne haette, d.h. ich suche nach einer Moeglichkeit, $ergebnisArray nach $keyOrder zu sortieren.

Ich denke, mit usort waere das irgendwie moeglich, aber irgendwie haben all' meine Versuche nicht gefruchtet und zu entweder dem gleichen oder 'Leerstellen' gefuehrt :(


Viele Grueße,
Caralynn
 
PHP:
<?php

$ergebnisArray = array();
$ergebnisArray["Awert"] = array("W1"=>"Tschirp");
$ergebnisArray["Bwert"] = array("W4"=>"Tschorp");
$ergebnisArray["Cwert"] = array("W4"=>"Tscherp");
$ergebnisArray["Dwert"] = array("W4"=>"Tschurp");

$keyOrder = array("Awert","Dwert","Bwert","Cwert");

for($i=0;$i < count($keyOrder);$i++)
{
   foreach($ergebnisArray as $key => $value)
   {
      if($key == $keyOrder[$i])
      {
         echo $key.'<br/>';
      }
   }
}

?>
 
Hallo PHP_HILFE_2011,

danke =)
Das hat mir sehr weitergeholfen, auf zwei Schleifen kam ich wohl nicht... manchmal sieht man den Wald vor lauter Baeumen nicht Oo

Viele Grueße,
Caralynn
 
Falls du dich dazu druchringen kannst, die Sortierung anders zu definieren, gehts elegant mit dem array_multisort
PHP:
$ergebnisArray["Awert"] = array("W1"=>"Tschirp");
$ergebnisArray["Bwert"] = array("W4"=>"Tschorp");
$ergebnisArray["Cwert"] = array("W4"=>"Tscherp");
$ergebnisArray["Dwert"] = array("W4"=>"Tschurp");

//Wichtig: Die Reihenfolge muss identisch sein mit dem $ergebnisArray
//Die Values sind die Sortierreihenfolge
$keyOrder["Awert"] = 1;
$keyOrder["Bwert"] = 3;
$keyOrder["Cwert"] = 4;
$keyOrder["Dwert"] = 2;
 
array_multisort($keyOrder, $ergebnisArray);
print_r($ergebnisArray);
 
Zurück