使用不同的排序数组排序对象数组

时间:2013-06-04 10:45:49

标签: php sorting

我有点陷入一些数组排序,也许有人可以帮我解决?

鉴于这两个阵列:

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

我想按$data中指定的ID顺序对$sortOrder进行排序。

所以在排序后我想要$ data这样:

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

我该怎么做?

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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);
});

答案 2 :(得分:0)

您尝试使用sort和foreach来制作它吗? http://php.net/manual/en/function.sort.php