2012-04-23 91 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']; 
});