PHP Сортировать массив по позиции в ассоциативном массиве - PullRequest
0 голосов
/ 10 декабря 2018

Я хочу отсортировать массив, ссылаясь, например, на позицию свойства в другом массиве.

$referenceArray = ['red', 'green', 'blue'];
$testArray = [obj1, obj2, obj3, obj4];

foreach($testArray as $object) {
    if($object->colour === "red") {
        // push to TOP of array
    } elseif($object-color == "green") {
        // push to MIDDLE of array
    } elseif($object->color === "blue") {
       // push to BOTTOM o array 
    }
}

Возможно ли это с помощью встроенного метода сортировки php?или это можно сделать только так, как я псевдо-кодировал выше.

С уважением

1 Ответ

0 голосов
/ 10 декабря 2018

Поскольку у вас есть объекты в массиве, вы не сможете использовать какой-либо встроенный метод, кроме usort, если только вы не захотите привести объекты к массивам:

$referenceArray = ['red', 'green', 'blue'];
$testArray = [obj1, obj2, obj3, obj4];

usort($testArray, function ($x, $y) use ($referenceArray) {
     $xIndex = array_search($x->color, $referenceArray); //Is it color or colour? 
     $yIndex = array_search($y->color, $referenceArray);
     return $xIndex <=> $yIndex;
});

Идея состоит в том,: При сравнении объекта $ x и объекта $ y получите индекс цвета $x и $y из $referenceArray и верните сравнение этих индексов.

...