旋转对象数组,使具有特定属性的对象成为第一个元素

问题描述 投票:0回答:3

我有以下数组:

$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作为第一个,然后是当前originally之后的所有项目,而最初before的项目将是最后一个。结果数组。

因此新数组将如下所示:

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] => 
)
)
php arrays sorting multidimensional-array rotation
3个回答
4
投票

您可能会对

usort()
功能感兴趣。

usort($input,function($a,$b) {return $a['current']-$b['current'];});

1
投票

您可以处理 usort() 函数。

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

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

usort($array_to_sort, function($a,$b) {
    return $a['current']-$b['current'];
});

0
投票

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

while($myarray[0]['current']<>1) {
  array_push($myarray, array_shift($myarray));
}
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.