2014-09-18 213 views
0

由值数组我如何把这个:排序基于另一个阵列

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

分为:基于此

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

Array('Staff', 'Board' ) 

换句话说 - 为基于数组值的对象排序...

+2

[基于另一个数组对数组进行排序?](http://stackoverflow.com/questions/348410/sort-an-array-based-on-another-array) – Jay 2014-09-18 22:54:59

+1

不要使用6年旧的答案是重复的。从那以后,PHP被重新创建了两次,比如我使用[匿名函数](http://php.net/manual/en/functions.anonymous.php)来实现这个目前不可能的事情(没有'创造功能“至少)。此外,该解决方案对于此问题的预期输出无效。因此,这不是*重复的,至少是这个问题。 – 2014-09-18 22:57:24

+0

@derp这不是一个重复的问题,因为源数据在结构上甚至没有*远程*看起来像标记的问题,既没有预期的输出,也需要完全不同的解决方案。你说的是宝马M3和菲亚特500是相同的汽车,因为它们都有方向盘。 – 2014-09-18 23:19:52

回答

2
$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; 
}); 

这个例子确实假设$ordering将包含它将遇到的所有名称。如果没有,你将不得不修补那里的行为(不能这样做,因为我不知道'你想要不匹配项目在哪里排序')。

+0

gah - usort!我一直盯着那个php的manpage上一个多小时......来吧......脑海里...... – Trees4theForest 2014-09-18 22:56:01

+0

哪一部分不清楚? – 2014-09-18 23:00:33

+0

您对$订购的评论 - 那些无法匹敌的人被踢到底?无法保证我将全部获得:P – Trees4theForest 2014-09-18 23:01:17