Sortierreihenfolge eines Arrays auf ein anderes anwenden

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Xwitz
Mitglied
Beiträge: 1104
Registriert: 21.06.2005 21:41

Sortierreihenfolge eines Arrays auf ein anderes anwenden

Beitrag von Xwitz »

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.
BB-BF-BM
Mitglied
Beiträge: 2179
Registriert: 28.10.2005 16:38
Wohnort: Essen

Beitrag von BB-BF-BM »

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...

Code: Alles auswählen

$array1 = array('grün', 'rot', 'orange');
$array2 = array('Apfel', 'Tomate', 'Pfirsich');

$array = array_combine($array1, $array2);

uksort($array, 'deinefunktion');
Xwitz
Mitglied
Beiträge: 1104
Registriert: 21.06.2005 21:41

Beitrag von Xwitz »

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:

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';

?>
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. :grin:

Für Verbesserungsvorschläge bin ich natürlich offen.
Xwitz
Mitglied
Beiträge: 1104
Registriert: 21.06.2005 21:41

Beitrag von Xwitz »

Wie ich gerade feststellen mußte, kommt man mit array[0] nicht an das erste Element eines assoziativen arrays.

reset(), end(), next() und so weiter habe ich zwar gefunden aber gibt es wirklich keine Möglichkeit, direkt an die anderen Elemente an einer Position zu gelangen?
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag von Pyramide »

[php:array_values]
KB:knigge
Xwitz
Mitglied
Beiträge: 1104
Registriert: 21.06.2005 21:41

Beitrag von Xwitz »

Methode Kommando zurück sozusagen.

Danke euch beiden.
Antworten

Zurück zu „Coding & Technik“