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

时间:2018-12-10 10:23:31

标签: php arrays sorting ksort

例如,我想对一个引用属性的位置的数组进行排序。

$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 :(得分:1)

由于数组中有对象,因此除非您愿意将对象转换为数组,否则您不能真正使用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的颜色的索引,然后返回这些索引的比较。