1

我有以下数组:

$myarray = Array (
[1] => stdClass Object ( 
    [ID] => 1 
    [current] => 
)

[2] => stdClass Object ( 
    [ID] => 2 
    [current] => 1 
)

[3] => stdClass Object ( 
    [ID] => 3 
    [current] =>
)

[4] => stdClass Object ( 
    [ID] => 4 
    [current] =>
)

[5] => stdClass Object ( 
    [ID] => 5 
    [current] =>
)
)

而且我需要对它进行排序,将值current作为第一个,然后是最初在当前项目之后的所有项目而最初之前的项目将是结果数组中的最后一个项目。

所以新数组看起来像这样:

Array (
[1] => stdClass Object ( 
    [ID] => 2 
    [current] => 1 
)

[2] => stdClass Object ( 
    [ID] => 3 
    [current] =>
)

[3] => stdClass Object ( 
    [ID] => 4 
    [current] =>
)

[4] => stdClass Object ( 
    [ID] => 5 
    [current] =>
)

[5] => stdClass Object ( 
    [ID] => 1 
    [current] => 
)
)

非常重要的是

4

3 回答 3

4

usort()您可能对这个功能感兴趣。

usort($input,function($a,$b) {return $a['current']-$b['current'];});
于 2012-04-23T16:01:31.897 回答
1

您可以处理usort()函数。

您基本上设置了自定义订单函数,并将其作为第二个参数传递给 usort()(第一个是要排序的数组)。

在回调函数中,您可以定义数组的排序方式。例如

usort($array_to_sort, function($a,$b) {
    return $a['current']-$b['current'];
});
于 2012-04-23T16:06:23.880 回答
0

如果您想保持相同的元素顺序,请不要对数组进行排序,而是将其旋转直到当前元素排在第一位,例如

while($myarray[0]['current']<>1) {
  array_push($myarray, array_shift($myarray));
}
于 2012-04-23T16:12:15.717 回答