Hallo, ich versuche zwei Arrays zu sortieren, wobei die Elemente das zweiten Arrays einfach nur die Position einnehmen sollen, wie die in dem ersten Array, so das der Bezug bestehen bleibt.
Als Beispiel
array1 = array(grün, rot, orange);
array2 = array(Apfel, Tomate, Pfirsich);
Das Array1 soll z.B. nach der Stringlänge sortiert werden.
Das Ergebnis sollte so aussehen:
array1: (rot, grün, orange)
array2: (Tomate, Apfel, Pfirsich)
Ich weiß, daß ich Sortierungen wie nach Stringlänge mit usort durchführen kann aber wie erreiche ich, das die Elemente in array2 den Bezug zu den Elementen in array1 beibehalten?
Sollte es mit array_multisort() machbar sein, dann verstehe ich nicht wie. Ich bitte zum Hilfe.
Sortierreihenfolge eines Arrays auf ein anderes anwenden
warum erstellst du nicht ein Array mit den Werten des einen als Schlüssel und denen des anderen als Werte, z.B. mit array_combine()
Wenn du dann noch uksort() verwendest, bleiben die Beziehungen behalten...
Wenn du dann noch uksort() verwendest, bleiben die Beziehungen behalten...
Code: Alles auswählen
$array1 = array('grün', 'rot', 'orange');
$array2 = array('Apfel', 'Tomate', 'Pfirsich');
$array = array_combine($array1, $array2);
uksort($array, 'deinefunktion');
Zuerst einmal, weil ich die Funktion array_combine() bis jetzt nicht kannte und zum zweiten, weil ich kein PHP 5 habe, sondern nur PHP 4. Die Funktion kann ich aber auch "nachbauen".
Allerdings war meine Frage auch nicht ganz vollständig, ich brauche auch noch die Werte (im Beispiel die der Stringlänge) für eine spätere Abbruchbedingung, Entschuldigung. Deshalb dachte ich auch daran array_multisort() zu verwenden und die Werte für die Stringlänge vorher zu ermitteln. Nun könnte ich den Wert beiden Arrays als Schlüssel zuzuweisen aber es können zwei gleiche Werte auftreten und irgendwo habe ich gelesen, daß dann bei gleichen Werten die Reihenfolge, ab einer bestimmten php-Version, nicht mehr definiert ist. Ach ja und die Farben können auch doppelt vorkommen, mit verschiedenen Früchten, falls das bei einer möglichen Lösung ein Problem darstellen sollte. Ich denke einen der drei Werte (Farbe, Frucht, Länge) als Schlüssel zu verwenden scheidet deshalb wegen Unsicherheiten aus.
Ich habe jetzt aber eine Idee (jedem Array einen durchnumerierten Schlüssel verpassen), der ich nachgehen werde. Falls Du also nicht gerade sofort eine Lösung parat hast, dann brauchst Du erstmal nicht so viel Mühe darauf zu verwenden.
EDIT:
ergibt:
Farbe: orange, Frucht: Pfirsich
Farbe: grün, Frucht: Apfel
Farbe: blau, Frucht: Pflaume
absteigend nach Farblänge (größer 3) sortiert
Ab sofort drücke ich mich nicht mehr um die Verwendung von assoziativen Arrays.
Für Verbesserungsvorschläge bin ich natürlich offen.
Allerdings war meine Frage auch nicht ganz vollständig, ich brauche auch noch die Werte (im Beispiel die der Stringlänge) für eine spätere Abbruchbedingung, Entschuldigung. Deshalb dachte ich auch daran array_multisort() zu verwenden und die Werte für die Stringlänge vorher zu ermitteln. Nun könnte ich den Wert beiden Arrays als Schlüssel zuzuweisen aber es können zwei gleiche Werte auftreten und irgendwo habe ich gelesen, daß dann bei gleichen Werten die Reihenfolge, ab einer bestimmten php-Version, nicht mehr definiert ist. Ach ja und die Farben können auch doppelt vorkommen, mit verschiedenen Früchten, falls das bei einer möglichen Lösung ein Problem darstellen sollte. Ich denke einen der drei Werte (Farbe, Frucht, Länge) als Schlüssel zu verwenden scheidet deshalb wegen Unsicherheiten aus.
Ich habe jetzt aber eine Idee (jedem Array einen durchnumerierten Schlüssel verpassen), der ich nachgehen werde. Falls Du also nicht gerade sofort eine Lösung parat hast, dann brauchst Du erstmal nicht so viel Mühe darauf zu verwenden.
EDIT:
Code: Alles auswählen
<?php
$array1 = array('grün', 'rot', 'orange', 'blau');
$array2 = array('Apfel', 'Tomate', 'Pfirsich', 'Pflaume');
$array_a = array();
$array_b = array();
$array_c = array();
$i = 0;
foreach ($array1 as $value){
$array_a["s$i"] = strlen($value);
$array_b["s$i"] = $value;
$i++;
}
$i = 0;
foreach ($array2 as $value){
$array_c["s$i"] = $value;
$i++;
}
arsort($array_a);
$x = 3;
foreach ($array_a as $key => $value){
if($value <= $x){ // Abbruchbedingung
break;
} else {
echo 'Farbe: '.$array_b[$key].', Frucht: '.$array_c[$key].'<br>';
}
}
echo 'absteigend nach Farblänge (größer 3) sortiert';
?>
Farbe: orange, Frucht: Pfirsich
Farbe: grün, Frucht: Apfel
Farbe: blau, Frucht: Pflaume
absteigend nach Farblänge (größer 3) sortiert
Ab sofort drücke ich mich nicht mehr um die Verwendung von assoziativen Arrays.

Für Verbesserungsvorschläge bin ich natürlich offen.