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

我想$data按中指定的 id 顺序排序$sortOrder

所以排序后我希望 $data 是这样的:

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

我该怎么做?

4

3 回答 3

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);
于 2013-06-04T10:54:20.813 回答
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);
});
于 2013-06-04T11:54:07.463 回答
0

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

于 2013-06-04T10:53:22.567 回答