2017-12-03 2 views
-1

Im folgendes zu erreichen versuchen:Laravel - Sortierung Sammlung mit einer bestimmten Reihenfolge durch eine Reihe von ids gegeben

Können sagen, ich habe ein collectiom von Produkten wie dies:

$ products =

[{ id: 1, name: example1, price: 10 }, {id: 2, name: example2, price: 20}] 

Und ein Array mit einem ID:

[0 => 2] 

ich die $ products co sortieren möchten Eine Auswahl mit dem Array, die dazu führen würde, dass das Produkt mit der ID 2 zuerst in der Sammlung oder in ähnlichen Worten angezeigt wird, gibt den Elementen in der Sammlung Priorität, die auf dem Array steht. Ich hoffe, Sie können mich verstehen.

Was ich ohne Erfolg versucht (kippe Änderungen sehen):

$events = $events->sortBy(function($model) use ($ToposDestaques) { 
       return array_search($model->getKey(), $ToposDestaques); 
      }); 

$ events hat zwei Elemente mit der ID 1 und ID 2

$ TopoDestaques hat den folgenden Wert:

array:1 [ 
    0 => 2 
] 

Vielen Dank.

Antwort

0

Ich bin mir nicht sicher, dass Sie das tun sollten mit sortBy Funktion verursachen Sie Sortieren nach dem Array der ID, so dass Sie über es und nicht die Sammlung iterieren sollten.
Dies kann nur mit PHP std behandelt werden:

$products = [[ "id"=> 1, "name"=> "example1", "price"=> 10 ], [ "id"=> 2, "name"=> "example2", "price"=> 20 ], [ "id"=> 3, "name"=> "example3", "price"=> 30 ]]; 
$sortByArr = [3, 2]; 

$sortedArray = array_reduce($sortByArr, function($array, $index) use (&$products) { 
    $productIndex = array_search($index, array_column($products, "id")); 
    $array[] = $products[$productIndex]; 
    unset($products[$productIndex]); 
    return $array; 
}, []); 

var_dump(array_merge($sortedArray, $products)); 
+0

es nicht funktioniert, kommt es zu einem einzelnen Elemente Array, und ich möchte nicht, dass ich die gleiche Sammlung will, aber durch die Anordnung der Ide neu geordnet. –

+0

Ich habe es nicht geschrieben, weil Sie es auf verschiedene Arten tun können, und Sie müssen diejenige auswählen, die Sie mindestens kostet. Ich habe meine Antwort bearbeitet, um einen Weg zu präsentieren. – Michael

Verwandte Themen