2017-02-10 2 views
0

ich diese Reihe von Optionen haben, und einen Wert eines internen Arrays ist die „ID“Sortierung ein Array (einen bestimmten Wert suchen), basierend auf einem anderen Array

[options] => Array (
    [0] => Array (
     [id] => 1088 
     [label] => John 
    ) 
    [1] => Array (
     [id] => 1089 
     [label] => Peter 
    ) 
    [2] => Array (
     [id] => 1050 
     [label] => Mary 
    ) 
    .... 

Auf der anderen Seite, ich habe diese Array:

$array_sort = array(1089, 1050, 1088, ...); 

ich die Optionen Array des ersten Arrays möchten sortiert wird (Suche die "id") basierend auf der $array_sort.

Ich weiß, wie man es auf eine sehr schmutzige Art und Weise macht (mit vielen Schleifen und temporären Arrays), aber ich denke, es gibt eine clevere Lösung von array_ * -Funktionen, um dies zu tun.

Vielen Dank!

+0

Danke für die Ausgabe, @Qirel – FlamingMoe

Antwort

1

Sie könnten array_filter verwenden Sie die Optionen, um nur die im sortierten Feld zu begrenzen, dann usort sie in der array_search mit $array_sort Array basierend auf ihrer Position zu sortieren:

$sorted = array_filter($options, function($arr) use($array_sort) { 
    return in_array($arr['id'], $array_sort); 
}); 
usort($sorted, function($a, $b) use($array_sort) { 
    return array_search($a['id'], $array_sort) - array_search($b['id'], $array_sort); 
}); 
// $sorted should now be the sorted array 
+0

$ sorted returns nur 1 :-( – FlamingMoe

+0

Sorry, es sortiert das Array in-Place. Ich werde den Code bearbeiten. –

+0

Ich kann nicht bearbeiten, aber Sie haben die "Verwendung ($ array_sort)" in den beiden Funktionen in Um den richtigen Array-Bereich zu erhalten, da er außerhalb der Funktionen liegt ;-) und IT WORKS !! DANKE – FlamingMoe

Verwandte Themen