Php 基于另一个数组按值对数组进行排序

Php 基于另一个数组按值对数组进行排序,php,arrays,sorting,Php,Arrays,Sorting,我该如何扭转这种局面: Array ( [0] => stdClass Object ( [id] => 123 [name] => Board ) [1] => stdClass Object ( [id] => 133 [name] => Staff ) ) 进入: 基于此: Ar

我该如何扭转这种局面:

Array
(
    [0] => stdClass Object
        (
            [id] => 123
            [name] => Board
        )
    [1] => stdClass Object
        (
            [id] => 133
            [name] => Staff
        )
)
进入:

基于此:

Array( 'Staff', 'Board'  )
换句话说——根据一组值对一组对象进行排序…

$ordering=['Staff','Board'];
$ordering = ['Staff', 'Board'];
usort($myObjects, function($a, $b) use ($ordering) {
    $idx1 = array_search($a->name, $ordering);
    $idx2 = array_search($b->name, $ordering);
    if($idx1 == $idx2)
        return 0;
    elseif($idx1 < $idx2)
        return -1;
    return 1;
});
usort($myObjects,function($a,$b)use($ordering){ $idx1=数组搜索($a->name,$ordering); $idx2=数组搜索($b->name,$ordering); 如果($idx1==$idx2) 返回0; elseif($idx1<$idx2) 返回-1; 返回1; });

本例假设
$ordering
将包含它将遇到的所有名称。如果没有,您将不得不修补其中的行为(不能这样做,因为我不知道您希望不匹配的项目排序到哪里)。

的可能重复项不要使用6年前的答案作为重复项。从那时起,PHP已经被重新发明了两次,例如,请参阅我使用的来实现这一点,这在当时是不可能的(至少在没有
createfunction
hacks的情况下)。此外,该解决方案对于该问题的预期输出无效。因此,这不是一个重复的问题,至少是该问题。@derp这不是一个重复的问题,因为源数据在结构上与标记的问题根本不相似,预期的输出也不相似,需要完全不同的解决方案。你是说宝马M3和菲亚特500是同一款车,因为它们都有方向盘。车龄不是问题,但看起来确实不同,不会重复。我已经修改了标题,希望能把这一点说清楚。嘎——乌斯波特!我已经盯着php主页看了一个多小时了。。。来吧,布莱恩……关于你对$ordering的评论——那些无与伦比的人会被踢到底吗?不能保证我会全部得到:如果没有找到匹配项,P
array\u search
返回
FALSE
。因此,对于2个不匹配的对象,它们现在被视为相等(都是
FALSE
),并且可能会随机出现在数组中的任何位置。您应该抛出一个错误,或者在那里引入更多定义的行为。
$ordering = ['Staff', 'Board'];
usort($myObjects, function($a, $b) use ($ordering) {
    $idx1 = array_search($a->name, $ordering);
    $idx2 = array_search($b->name, $ordering);
    if($idx1 == $idx2)
        return 0;
    elseif($idx1 < $idx2)
        return -1;
    return 1;
});