PHP按关联数组中的位置对数组进行排序

我想对一个引用另一个数组中属性位置的数组进行排序 .

$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)

2 years ago

由于您在数组中有对象,因此除非您愿意将对象强制转换为数组,否则您无法真正使用除_7936之外的任何内置方法:

$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时,从 $referenceArray 获取 $x$y 的颜色索引并返回这些索引的比较 .