2016-08-02 9 views
0

Ich habe dieses Array:PHP, Sort/Merge mehrdimensionales Array von anderen (kleineren) Array

$original=[]; 
$original[]=['value'=>'a','count'=>10]; 
$original[]=['value'=>'b','count'=>15]; 
$original[]=['value'=>'c','count'=>23]; 
$original[]=['value'=>'d','count'=>40]; 
$original[]=['value'=>'e','count'=>25]; 

Und dieses Array, das die Elemente enthält, die zu Beginn des $ Original-Array sein sollte:

$sort=['d','c']; 

So sollte das Ergebnis schließlich sein:

[ 
    (int) 0 => [ 
     'value' => 'd', 
     'count' => (int) 40 
    ], 
    (int) 1 => [ 
     'value' => 'c', 
     'count' => (int) 23 
    ], 
    (int) 2 => [ 
     'value' => 'a', 
     'count' => (int) 10 
    ], 
    (int) 3 => [ 
     'value' => 'b', 
     'count' => (int) 15 
    ], 
    (int) 4 => [ 
     'value' => 'e', 
     'count' => (int) 25 
    ], 
] 

eine einfache Verwendung für Schleife dies machbar ist, aber gibt es eine schöne Möglichkeit, um dies zu tun?

+0

Ist Ihr '$ sollte mehrdimensional sein? Welche Art von Verhalten erwarten Sie zum Beispiel für '$ sort = [['d', 'c'], ['b', 'a']]'? – wazelin

+0

Nein. $ Sort enthält nur die Werteschlüssel, nichts anderes –

+0

Aber in Ihrem Beispiel ist es '$ sort = [['d', 'c']]'. – wazelin

Antwort

0

Sie könnten dies sort` Array tun usort

$priority = ['d', 'c']; 
usort($original, function ($a, $b) use ($priority) { 

    $prioA = array_search($a['value'], $priority); 
    $prioB = array_search($b['value'], $priority); 

    if ($prioA !== false && $prioB !== false) { 
     if ($prioA < $prioB) return -1; 
     return 1; 
    } 
    if ($prioA !== false) return -1; 
    if ($prioB !== false) return 1; 

    return 0; 
}); 
+0

Danke! Das funktioniert! Aber wie soll ich $ sortieren? Die Verwendung von ['d', 'c'] ist keine Option, da dieses Array dynamisch ist. –

+0

Ich habe mit der Übergabe von '$ priority' an die Schließung aktualisiert – NDM

+0

Du bist der Beste! –