2012-01-08 102 views
0

我有一個可以包含零值的數組。保留數組的順序

$array = array(3=> 1000, 5=> 0, 6=> 5000, 7 => 0); 

由於使用該數組的代碼無法管理字段設置爲0,我需要刪除它們。 (我認爲到外地以0作爲值存儲在一個臨時數組):

$zero_array = array(); 
foreach ($array as $k => $s) { 
    $zero_array[$k] = $k; 
    unset($stack[$k]); 
} 

後的核心代碼已經拼命地跑我希望把後面的申請,在同一位置有0的值,因爲他們是。

核心代碼返回一個這樣的數組:

$output = array(3 => 10, 6 => 50); 

我想補充舊密鑰,並獲得這樣的:

$output = array(3 => 10, 5 => 0, 6 => 50, 7 => 0); 
+0

嘗試array_merge($ output,$ zero_array)? – 2012-01-08 20:01:10

+0

保持原始數組的原樣,然後創建該數組的副本,但不要在代碼中使用0值。你可以在你的代碼完成對它的使用後取消設置()該數組,並且你仍然有你的原創作品用於你需要做的任何事情。 – 2012-01-08 20:01:38

回答

3

只需使用array_filter在這種情況下,除去0值:

$old_array = array(3 => 1000, 5=> 0, 6=> 5000, 7 => 0); 
$new_array = array_filter($old_array); 

// Now: $new_array = Array ([3] => 1000 [6] => 5000) 

然後,你的東西,你想$new_array

// Core code: Divide each element by 100: 
$new_array = array(3 => 10, 6 => 50); 

然後使用array union operator隨後ksort得到您想要的數組:

$array = $new_array + $old_array; 
ksort($array); 

// Now: Array ([3] => 10 [5] => 0 [6] => 50 [7] => 0) 

注意:如果Array ([3] => 10 [6] => 50 [5] => 0 [7] => 0)是可以接受的(IE。所有與您所需數組相同的鍵值對,只是順序不同),那麼您可以跳過對ksort的調用。