2012-04-23 90 views
1

我有以下阵列:PHP自定义数组排序

$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] => 
) 
) 

而且我需要对它进行排序,具有值当前为先,和后来的一切都原本后的项目当前的一个,以及原来之前的项目将是结果数组上的最后一个。

因此,新的阵列是这样的:

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] => 
) 
) 

回答

0

如果你想保持元件的相同顺序不排序的数组,但它旋转,直到当前的元素是第一个,例如

while($myarray[0]['current']<>1) { 
    array_push($myarray, array_shift($myarray)); 
} 
+0

旋转而不是排序,永远不会发现它heehe非常感谢...现货! – eduardev 2012-04-23 16:16:38

4

usort()功能可能是你的兴趣是非常重要的。

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

使用该解决方案,第一个数组项将是我原来的最后一个。我需要保持原来的顺序。看看我想要的结果的ID – eduardev 2012-04-23 16:11:04

+0

嗯...在这种情况下,您应该使用'foreach'来查找'current'条目,然后['array_splice'](http://php.net/array_splice)和['array_unshift'](http://php.net/array_unshift)将帮助你把它放在前面。如果这太复杂了,可以考虑重新设计数据是如何获取的。 – 2012-04-23 16:13:27

1

您可以处理usort()函数。

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

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

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