2013-05-07 52 views
2

我有一個這樣的數組:
移動鍵/值

array (size=8) 
    'cb' => string '<input type="checkbox"/>' (length=24) 
    'title' => string 'Name' (length=4) 
    'download_category' => string 'Categories' (length=10) 
    'download_tag' => string 'Tags' (length=4) 
    'price' => string 'Price' (length=5) 
    'sales' => string 'Sales' (length=5) 
    **'earnings' => string 'Earnings' (length=8)** 
    'shortcode' => string 'Purchase Short Code' (length=19) 
    'date' => string 'Date' (length=4) 

現在我想做的事情,就是移動的「收入」之一,像這樣的第三位:

array (size=9) 
    'cb' => string '<input type="checkbox"/>' (length=24) 
    'title' => string 'Name' (length=4) 
    **'earnings' => string 'Earnings' (length=8)** 
    'download_category' => string 'Categories' (length=10) 
    'download_tag' => string 'Tags' (length=4) 
    'price' => string 'Price' (length=5) 
    'sales' => string 'Sales' (length=5) 
    'shortcode' => string 'Purchase Short Code' (length=19) 
    'date' => string 'Date' (length=4) 

該數組的前9個元素是靜態的,因爲該順序是固定的,但如果重要的話,該數組中可能會有更多元素(在'date'後面)。

因此,我正在尋找一種簡單的方法來移動當前第三個元素位置前的第x個元素。

我曾經試過的一件事是將前2個元素保存到變量中,然後將它們取消設置。我還將收益元素設置爲變量。所以數組從第三個元素開始。然後,因爲我想我的元素提前3元的,我需要與其他2個元素回來,像這樣:

$first = $array[0]; 
$second = $array[1]; 
$earnings_element = $array['earnings']; 
unset($array[0]); 
unset($array[1]); 
unset($array['earnings']); 
array_unshift($array,$first,$second,$earnings_element); 

的問題是,無論是我失去了元素的名稱(它成爲一個關鍵值1,2等)或插入返回的那些元素的值。

任何人都知道更簡單的方法?

編輯:我在下面的代碼中使用「數組」作爲數組的名稱。它不是實際數組的名稱。

+0

的答案在這裏可能是你在找什麼:http://stackoverflow.com/questions/15540906/move-items-up-or-down-in-an -associative-array-list-php – sgroves 2013-05-07 14:01:49

+0

'array_splice'是你的一個通用解決方案。 – Jon 2013-05-07 14:07:41

回答

3

試試這個:

$front = array_slice($array,0,2); 
$front['earnings'] = $array['earnings']; 
$back = array_slice($array,2); 
unset($back['earnings']); 
$array = array_merge($front,$back); 
+0

謝謝!這真的很好:) – Chris 2013-05-07 14:34:32