ein array sortieren?
tom kreuzfahrt
- php
0 Der-Dennis0 tom kreuzfahrt
tag,
ich habe 2 arrays, eines:
Array
(
[0] => 234
[1] => 345
[2] => 123
)
und noch eines:
Array
(
[0] => Array
(
[id] => 1
[token] => 123
[field] => 1
[question] => question
[answer1] => answer
[answer2] => answer
[answer3] => answer
[answer4] => answer
[correct] => 2
[right] =>
[wrong] =>
[info] => 0
)
[1] => Array
(
[id] => 2
[token] => 234
[field] => 1
[question] => question
[answer1] => answer
[answer2] => answer
[answer3] => answer
[answer4] => answer
[correct] => 2
[right] =>
[wrong] =>
[info] => 0
)
[2] => Array
(
[id] => 3
[token] => 345
[field] => 1
[question] => question
[answer1] => answer
[answer2] => answer
[answer3] => answer
[answer4] => answer
[correct] => 4
[right] =>
[wrong] =>
[info] => 0
)
)
jetzt sind die werte des ersten array im zweiten jeweils im unterpunkt "token" zu finden. ich würde gern in php das zweite array in der reihenfolge des ersten array auslesen. also in diesem beispiel erst [1], dann [2] und am ende erst [0].
ich kenne nur die möglichkeit, 3 mal eine schleife laufen zu lassen und jedes mal zu schauen, ob der wert meiner ist, um dann den eintrag in ein neues array zu kopieren. scheint mir aber bei großen array eher unvorteilhaft.
darum ist die frage, ob es für soetwas einen kleinen befehl gibt, der das auch besser kann.
danke
Hey Tom,
kannst Du nicht die Werte von Array1 als Schlüssel in Array2 verwenden? In dem Falle sollte eine Sortierung problemlos möglich sein (wenn es keine doppelten Einträge in Array1 gibt).
Ansonsten wüsste ich auch nur die Möglichkeit dies mittels einer Schleife zu lösen.
Gruß, Dennis
Hey Tom,
hey dennis,
kannst Du nicht die Werte von Array1 als Schlüssel in Array2 verwenden? In dem Falle sollte eine Sortierung problemlos möglich sein (wenn es keine doppelten Einträge in Array1 gibt).
naja, das array1 erstellt sich aus einem string mit eben diesen nummern, das ich dann mit explode zerlege, konkret 234/345/123. und das array2 kommt aus einer mysql abfrage a la SELECT * FROM questions
WHERE ((token
LIKE "234") || (token
LIKE "345") || (token
LIKE "123")), die aber die ergebnisse nicht in der reihenfolge der tokens, sondern in der reihenfolge der einträge in der datenbank ausgibt. sonst könnte man dort vielleicht noch ansetzen.
gruß
Hi!
und das array2 kommt aus einer mysql abfrage
Nicht direkt. Genauer gesagt erstellst du das Array aus dem Ergebnis einer Abfrage. Und dabei kannst du auch gleich für den Schlüssel den Wert aus dem Token-Feld nehmen anstatt PHP selbst nummerieren zu lassen. Dann kannst du nämlich recht einfach auf deine Datensätze im Array zugreifen.
Lo!
Moin,
Nicht direkt. Genauer gesagt erstellst du das Array aus dem Ergebnis einer Abfrage. Und dabei kannst du auch gleich für den Schlüssel den Wert aus dem Token-Feld nehmen anstatt PHP selbst nummerieren zu lassen. Dann kannst du nämlich recht einfach auf deine Datensätze im Array zugreifen.
sauber, das klingt gut. aber wir mach ich ein array_push und weise dann die schlüssel direkt zu?
array_push ($content, $row['token'] => $row);
klappt jetzt leider nicht.
gruß
Hi!
sauber, das klingt gut. aber wir mach ich ein array_push und weise dann die schlüssel direkt zu?
array_push ($content, $row['token'] => $row);
array_push() braucht man nicht wirklich. Es geht auch über $array['key'] = ...
Lo!
array_push() braucht man nicht wirklich. Es geht auch über $array['key'] = ...
ja, vielen dank, das klappt ja super
Hi,
naja, das array1 erstellt sich aus einem string mit eben diesen nummern, das ich dann mit explode zerlege, konkret 234/345/123. und das array2 kommt aus einer mysql abfrage a la SELECT * FROM
questions
WHERE ((token
LIKE "234") || (token
LIKE "345") || (token
LIKE "123")),
Zum einen solltest du dich mal über den IN-Operator informieren,
die aber die ergebnisse nicht in der reihenfolge der tokens, sondern in der reihenfolge der einträge in der datenbank ausgibt. sonst könnte man dort vielleicht noch ansetzen.
und zum anderen, Ja, man kann auch da ansetzen - FIELD oder FIND_IN_SET liefern dir die Position, an der ein bestimmter Wert in einer Liste von Werten auftaucht, und deren Ergebnis kannst du in einer ORDER BY-Klausel zur Sortierung benutzen. (Wenn du deine Query dynamisch per Script zusammenbaust, kannst du deine Suchargumente ja auch an der Stelle dynamisch einfügen.)
MfG ChrisB