基本上我有如下设置:
Array (
[0] => Array ( [0] => stdClass Object ( [nid] => 1 [title] => title1 [uid] => 1 [parent] => 0 [weight] => -15 [name] => name1 [value] => 0 )
[1] => stdClass Object ( [nid] => 2 [title] => title2 [uid] => 1 [parent] => 0 [weight] => -7 [name] => name2 [value] => 100 )
[2] => stdClass Object ( [nid] => 3 [title] => title3 [uid] => 2 [parent] => 0 [weight] => -1 [name] => name3 [value] => 0 )
[3] => stdClass Object ( [nid] => 4 [title] => title4 [uid] => 2 [parent] => 0 [weight] => 1 [name] => name4 [value] => 80 )
)
)
我需要的是一种通过Object中的[value]键对父数组中的所有数组进行排序的方法。我用usort和不同的方法尝试了大约2天,但我似乎无法理解它。 [value]键的范围从0到100,我需要按降序排序所有数组(IE:100降至0)。
答案 0 :(得分:13)
使用usort:
function cmp($a, $b) {
if ($a->value == $b->value) {
return 0;
} else {
return $a->value < $b->value ? 1 : -1; // reverse order
}
}
usort($arr, 'cmp');
答案 1 :(得分:4)
本页第一个答案100%被盗。
http://us.php.net/manual/en/function.array-multisort.php
但这正是我所寻求的。
multisort一个对象数组:
example object [$object with array of objects]: (class: test)
----------------------------------
test Object (
[Artikel] => Array (
[0] => test Object (
[id] => 1
[title] => CCCC
)
[1] => test Object (
[id] => 2
[title] => AAAA
)
[2] => test Object (
[id] => 3
[title] => DDDD
)
[3] => test Object (
[id] => 4
[title] => BBBB
)
)
)
----------------------------------
Simple PHP function: sort_arr_of_obj()
<?php
// --------------------------------------
/*
* -------- function arguments --------
* $array ........ array of objects
* $sortby ....... the object-key to sort by
* $direction ... 'asc' = ascending
* --------
*/
function sort_arr_of_obj($array, $sortby, $direction='asc') {
$sortedArr = array();
$tmp_Array = array();
foreach($array as $k => $v) {
$tmp_Array[] = strtolower($v->$sortby);
}
if($direction=='asc'){
asort($tmp_Array);
}else{
arsort($tmp_Array);
}
foreach($tmp_Array as $k=>$tmp){
$sortedArr[] = $array[$k];
}
return $sortedArr;
}
// --------------------------------------
?>
example call:
----------------------------------
<?php
$sorted->Artikel = sort_arr_of_obj($object->Artikel,'title','asc');
?>
example result: $sorted (class: test)
----------------------------------
test Object (
[Artikel] => Array (
[0] => test Object (
[id] => 2
[title] => AAAA
)
[1] => test Object (
[id] => 4
[title] => BBBB
)
[2] => test Object (
[id] => 1
[title] => CCCC
)
[3] => test Object (
[id] => 3
[title] => DDDD
)
)
)
答案 2 :(得分:3)
执行此操作的方法是将值数组与对象数组分开,从而创建两个数组。然后,您可以使用array_multisort根据另一个数组对对象数组进行排序。这是一个例子:
<?php
$array1 = $objectvalues
$array2 = array(ObjectWithNid1, ObjectWithNid2, ObjectWithNid3, ObjectWithNid4);
array_multisort($array1, $array2);
?>
您可以使用foreach循环数组一次并使用相应的[value]键创建一个新数组:
<?php
foreach( $arraywithobjects as $obj )
{
$objectvalues[] = $obj->getValue();
}
?>
这将获取Object的值并将其插入另一个可以与multisort一起使用的数组中。
最后,您的代码将如下所示:
<?php
foreach( $arraywithobjects as $obj )
{
$objectvalues[] = $obj->getValue();
}
$array2 = array(ObjectWithNid1, ObjectWithNid2, ObjectWithNid3, ObjectWithNid4);
array_multisort($objectvalues, $array2);
?>
array_multisort字段中的第一个数组应该是您用来对第二个数组进行排序的数组。
您还可以为此添加其他排序方法。您可以在此处阅读:link text
答案 3 :(得分:1)
function cmp($a, $b) {
return $b->value - $a->value;
}
$ary[0] = usort($ary[0], "cmp");
为了根据简单值或键以外的任何内容对数组进行排序,您需要使用usort
函数并提供自己的比较。必须定义比较函数,如果$a
在$b
之前,则返回正值,如果$b
在$a
之前,则返回负值(如果它们相等则为零) )。当您根据数字值进行比较并希望进行反向排序时,最简单的方法是从$a
的值中减去$b
的“值”。
答案 4 :(得分:0)
我可能错了,但我相信我使用asort()(或asort())做了类似的事情。它是在搜索功能中,我需要对填充了索引和时间戳的二维数组进行排序。
我不确定它是否适用于您的情况,而且我很久以前就这么做了。也许这会让你开始,祝你好运。