0

问题:如何用对象对多维数组进行排序?

状态:我有一个数组如下。

array(3) {
  [0]=>
  object(Photo_model)#25 (5) {
    ["id"]=>
    int(5)
    ["file_name"]=>
    string(36) "A49361605AE049D687CDC3FEAF7D3236.jpg"
    ["user_id"]=>
    int(1)
    ["challenge_id"]=>
    string(1) "2"
    ["score"]=>
    int(19)
  }
  [1]=>
  object(Photo_model)#28 (5) {
    ["id"]=>
    int(2)
    ["file_name"]=>
    string(36) "A49361605AE049D687CDC3FEAF7D3236.jpg"
    ["user_id"]=>
     int(1)
    ["challenge_id"]=>
    string(1) "2"
    ["score"]=>
    int(10)
  }
  [2]=>
  object(Photo_model)#29 (5) {
      ["id"]=>
      int(3)
      ["file_name"]=>
      string(36) "A49361605AE049D687CDC3FEAF7D3236.jpg"
      ["user_id"]=>
      int(1)
      ["challenge_id"]=>
      string(1) "2"
      ["score"]=>
      int(15)
  }
}

我试图按分数对数组进行排序。我创建了如下函数。

aarsort (&$array, 'score');
function aarsort (&$array, $key) {
    $sorter=array();
    $ret=array();
    reset($array);
    foreach ($array as $ii => $va) {
        $sorter[$ii]=$va[$key];
    }
    arsort($sorter);
    foreach ($sorter as $ii => $va) {
        $ret[$ii]=$array[$ii];
    }
    $array=$ret;
}

但它不起作用。如何按键(score)对多维数组进行排序?

结果应该是 id => 5,3,2

4

3 回答 3

3

您的数组只有一维,并且每个数组项中都有一个对象。

毕竟,要对由对象组成的一维数组进行排序,并按对象的某个属性进行排序,请使用usort

usort($array, function($a, $b) {
    return $a->score - $b->score
});

要从id => 5, 3, 2上面获取,只需从上面的代码中循环遍历数组并访问属性以获取它

$ids = array();
foreach ($array as $item) {
    $ids[] = $item->id;
}
var_dump($ids);

而且我不确定订单是否正确。如果结果是相反的顺序,只需在usort函数中否定闭包的结果。

于 2012-12-01T09:21:46.867 回答
0

我已经通过 php.net 解决了这个问题

// Obtain a list of columns
                foreach ($array as $key => $row) {
                    $_score[$key]  = $row->score;
                }

                // Sort the data with volume descending, edition ascending
                // Add $data as the last parameter, to sort by the common key
                array_multisort($_score, SORT_DESC, $array);
于 2012-12-01T12:45:33.720 回答
0

它只是一个例子。

//$newarray for store all array id
//$array is your previous array . You just enter your all index whose key id store in new array 
$newarray = array();
foreach($array as $obj => $id)
{
    $newarray[] = $id[$key];
}

array_multisort($newarray,SORT_ASC,$array);
于 2012-12-01T09:33:29.520 回答