2010-04-22 83 views
5

假設你有一個關聯數組什麼是重新排列關聯數組的最優雅的方法?

$hash['Fruit'] = 'Apple'; 
$hash['Name'] = 'Jeff'; 
$hash['Car'] = 'Ford'; 

,你不能改變在其中創建這些變量的順序。所以Car總是在Name之後添加到數組中。等等,將Car添加到關聯數組的開頭而不是結束(默認)是最漂亮的方法?

+0

是你要對數組進行排序? – Galen 2010-04-22 20:46:49

+0

並且您是否嘗試按字母順序排序?或者你只是想把汽車推到最高處,而不會觸動所有其他元素? – webbiedave 2010-04-22 20:49:24

+0

這是哪一句話? – webbiedave 2010-04-22 20:52:34

回答

8
$hash = array('Car' => 'Ford') + $hash; 
+0

嘿,偉大的思想*做*想象一樣:D看到我的答案變量版本。 – erisco 2010-04-22 20:52:49

2

ksort()

但是你爲什麼會關心數組的內部命令呢?

+0

我想他是要求推動到數組的開頭,這是一個很好的提示,雖然 – 2010-04-22 20:47:35

+0

我想到了這一點,但與他的真實數據計算出這種非常間接的解決方案並不總是工作。 – erisco 2010-04-22 20:50:56

+0

在這種情況下,我將使用foreach()稍後循環訪問數組,並且出於顯示目的,我希望某些值出現在頂部。 – 2010-04-22 20:52:29

1
array_reverse($hash, true); 

這不是一個很直接的解決方案,但一個是:

$value = end($hash); 
$hash = array(key($hash) => $value) + $hash; 
+0

是的,我讀過這個;-)移動已添加到數組的項目的好方法。 – zerkms 2010-04-22 20:59:29

0

另一個竅門是 -

$new_items = array('Car' => 'Ford'); 
$hash = array_merge($new_items, $hash); 

可以重新安排新的數組鍵也。假設汽車第一則另一個領域(比如標識),那麼陣列依然如此....

$new_items = array('Car' => 'Ford','Id'=>'New Id'); 
$hash = array_merge($new_items, $hash); 

的陣列將成爲像

$hash['Car'] = 'Ford'; 
$hash['Id'] = 'New Id'; 
$hash['Fruit'] = 'Apple'; 
$hash['Name'] = 'Jeff'; 
相關問題