2013-06-04 57 views
0

我有点卡在一些数组排序,也许有人可以帮我吗?通过使用不同的排序数组排序对象

鉴于这两个数组:

$sortOrder = array(12, 20, 4); 

$data = array(
    (object)array(
     'id' => 4, 
     'name' => 'Tom' 
    ), 
    (object)array(
     'id' => 12, 
     'name' => 'Bob' 
    ), 
    (object)array(
     'id' => 20, 
     'name' => 'Max' 
    ) 
) 

我想在$sortOrder指定的ID顺序排序$data

所以排序后,我想$的数据是这样的:

$data = array(
    (object)array(
     'id' => 12, 
     'name' => 'Bob' 
    ), 
    (object)array(
     'id' => 20, 
     'name' => 'Max' 
    ), 
    (object)array(
     'id' => 4, 
     'name' => 'Tom' 
    ), 
) 

我会怎么做呢?

回答

1

usort会帮助你。

usort($data, function ($a, $b) use ($sortOrder) { 
    $pos1 = array_search($a->id, $sortOrder); 
    $pos2 = array_search($b->id, $sortOrder); 

    return ($pos1 === $pos2) ? 0 : ($pos1 < $pos2 ? -1 : 1); 
}); 
+0

谢谢,这是最优雅的方法。 – acme

2

请试试这个。它会打印为您的预期输出。

$sortOrder = array(12, 20, 4); 

$data = array(
    array(
     'id' => 4, 
     'name' => 'Tom' 
    ), 
    array(
     'id' => 12, 
     'name' => 'Bob' 
    ), 
    array(
     'id' => 20, 
     'name' => 'Max' 
    ) 
); 

$sortedArray = array(); 
foreach($sortOrder as $id) 
{ 
    foreach($data as $_data) 
    { 
     if($_data["id"] == $id) 
     { 
      $sortedArray[] = $_data; 
      break; 
     } 
    } 
} 

print_r($sortedArray); 
+0

谢谢,它的工作原理! – acme

+0

您的欢迎.. :) – Hasina