问题:如何用对象对多维数组进行排序?
状态:我有一个数组如下。
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
答案 0 :(得分:3)
您的数组只有1维,每个数组项中都有一个对象。
毕竟,要对由对象组成的一维数组进行排序,并按对象的某个属性排序,请使用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
函数中否定闭包的结果。
答案 1 :(得分: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);
答案 2 :(得分: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);