PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PHP: Arrays nach Vorlage sortieren


mittelding
2010-06-11, 21:02:20
Hallo!

Es mag erst trivial klingen, aber mir fällt gerade keine gute Lösung ein.

Ich habe 4 assoziative Arrays in PHP.

Eines dient als Vorlage und sieht so aus:

$vorlage['id'] = ....

Dieses Array ist sortiert.

Jetzt habe ich noch 3 andere Arrays:

$eins['id'] = ....
$zwei['id'] = ....
$drei['id'] = ....


Diese sind aber total durcheinandergewürfelt - um das zu ändern, müsste man nur die id-Reihenfolge an die der Vorlage anpassen.
Die Keys der restlichen Arrays sollten also die selbe Reihenfolge haben wie die der Vorlage.

Alle Arrays sind natürlich gleich lang und besitzen die selben Keys.

Beispiel:

Meine Vorlage, in der Reihenfolge wie hingeschrieben ist es sortiert.

$vorlage['5'] = ...
$vorlage['2'] = ...
$vorlage['9'] = ...

Eines der weiteren Arrays sieht jetzt so aus:

$eins['9'] = ...
$eins['5'] = ...
$eins['2'] = ...

Wie es im Endeffekt aussehen sollte:

$eins['5'] = ...
$eins['2'] = ...
$eins['9'] = ...


Wie würdet ihr das machen?

vielen Dank!

edit: Alle arrays sind natürlich gleich lang und besitzen die selben Keys.

Marscel
2010-06-12, 13:14:55
Möglicherweise so:
$unsorted_hashs = array($eins, $zwei, $drei);
foreach($unsorted_hashs as &$hash) {
$new_hash = array();

foreach($vorlage as $k => $v) {
$new_hash[$k] = $hash[$k];
}

$hash = $new_hash;
}

Gast
2010-06-14, 10:30:45
Hallo Marcsel,

vielen Dank, habe es jetzt ebenfalls so gelöst. Es bleibt aber noch eine Frage zur Verwendung assoziativer arrays:

$new_hash[$k] = $hash[$k];

müsste man ja eigentlich

$new_hash[''.$k.''] = $hash[''.$k.''];

schreiben, oder (das sind jeweils 4 einfach Anführungszeichen pro Klammer)?

Erstens soll man laut PHP.net ja nicht sowas wie $array[foo] machen (und wenn man eine Variable direkt dort reinschreibt wäre es das ja), außerdem sind die IDs in meinem Beispiel ja numerisch... d.h. PHP würde vermutlich ein normales Array mit Index der ID anlegen, was sehr unpraktisch wäre. Bei der ID 10000 wäre das ein großes Arrray, selbst wenn es nur 3 Einträge hätte.

rotalever
2010-06-22, 15:44:40
Es bleibt aber noch eine Frage zur Verwendung assoziativer arrays:

$new_hash[$k] = $hash[$k];

müsste man ja eigentlich

$new_hash[''.$k.''] = $hash[''.$k.''];

schreiben, oder (das sind jeweils 4 einfach Anführungszeichen pro Klammer)?

Wenn deine IDs strings sein sollen aber $k kein string ist, dann ja. Ansonsten nein. Außerdem kann man auch mit
(string) $k
casten.


Erstens soll man laut PHP.net ja nicht sowas wie $array[foo] machen (und wenn man eine Variable direkt dort reinschreibt wäre es das ja),
Wo steht das denn, dass man das nicht machen sollen? Zudem wüsste ich nicht was "$array[foo]" bedeuten soll. Meinst du $array["foo"] oder $array[$foo]? Beides kann man ohne Probleme verwenden solange man weiß was man macht.

außerdem sind die IDs in meinem Beispiel ja numerisch... d.h. PHP würde vermutlich ein normales Array mit Index der ID anlegen, was sehr unpraktisch wäre. Bei der ID 10000 wäre das ein großes Arrray, selbst wenn es nur 3 Einträge hätte.
Wenn Du mit großes Array meinst, dass es mehr Speicherplatz verbraucht, dann müsste folgendes Script sehr viel Speicher verbrauchen

$a[100000000000] = 1;

Es verbraucht aber nicht viel Speicher.
Im übrigen gibt sizeof($a) hier auch 1 zurück und nicht etwa 100000000000