2017-08-02 3 views
1

ich ein Array haben sich wie folgt:Art Array basierend auf anderen Array sortieren

$aq=['jonathan','paul','andy','rachel']; 

Dann habe ich ein Array wie folgt:

$bq=['rachel','andy','jonathan']; 

Was ich brauche, ist die Reihenfolge der ersten verwenden Array, um mein zweites Array zu sortieren.

So für diese Instanz, die resultierende sollte sortiert Array sein:

$cq=['jonathan','andy','rachel']; 

begann ich an einer Lösung arbeiten, die den höchsten Schlüssel als Top-Wert verwendet (der Kopf des Arrays) weil das, was Im suchend ist der oberste Wert, aber das lief auf Probleme und schien mehr wie ein Hack, also ich denke, Sortierung ist was ich suche.

Gibt es eine einfache Funktion in PHP, dass meine Daten auf der Grundlage meiner ersten Anordnung und dort entsprechenden Positionen in dem Array

+0

Wenn die Reihenfolge des ersten nicht ganz wichtig ist, können Sie beide mit lexikalischer Sortierung (z. B. beide aufsteigend) sortieren, so dass die zweite in der richtigen Reihenfolge das erste Array beziehen würde. – Peter

Antwort

2

bitte versuchen Sie es diese kurze und saubere Lösung mit array_intersect sortieren:

$aq = ['jonathan','paul','andy','rachel']; 

$bq = ['rachel','andy','jonathan']; 

$cq = array_intersect($aq, $bq); 

var_export($cq); 

die Ausgabe wird:

array (0 => 'jonathan', 2 => 'andy', 3 => 'rachel',) 
+0

Dies ist eine elegante Antwort. – JakeParis

0

Sie müssen eine benutzerdefinierte Sortierfunktion verwenden. Hier greifen wir die Schlüssel der entsprechenden Einträge im Array "ordering" und verwenden sie, um das funktionierende Array zu sortieren.

In diesem Beispiel geben wir auf (return 0), wenn der Schlüssel nicht im sortierenden Array existiert; Vielleicht möchten Sie dieses Verhalten anpassen, aber das sollte Ihnen die allgemeine Idee geben.

$order = ['jonathan','paul','andy','rachel']; 
$arrayToSort =['rachel','andy','jonathan']; 

usort($arrayToSort,function($a,$b) use ($order){ 
    if(! array_key_exists($a,$order)) return 0; 
    if(! array_key_exists($b,$order)) return 0; 

    if(array_search($a,$order) > array_search($b,$order) 
     return 1; 
    return -1; 
}); 
Verwandte Themen