2016-11-06 49 views
0

使用PHP。 我有陣列1與此鍵和值:PHP array_merge無法正常工作

$array_1 = array(
(more values) 
'propub_cost_max' => 5, 
'propub_cost_min' => 0.5, 
'average_calc_last' => '-1 Months', 
'propub_qtd_first_offer' => 4 
); 

和陣列2:

$array_2 = array(
'propub_cost_max' => 20, 
'propub_cost_min' => (no value), 
'average_calc_last' => (no value), 
'propub_qtd_first_offer' => (no value) 
); 

我想與陣列1合併數組2,所以我所做的:

$result = array_merge($array_2, $array_1); 

但結果是:

$result = array(
(more values) 
'propub_cost_max' => 5, 
'propub_cost_min' => 0.5, 
'average_calc_last' => '-1 Months', 
'propub_qtd_first_offer' => 4 
); 

propub_cost_max鍵應該取值20,對嗎?

這個想法是保持一些值,當然,如果有任何值,則替換值不同的地方。 我認爲array_merge應該可以工作,但是...

謝謝大家。

+2

你有一個'}'而不是括號。 – TheValyreanGroup

+3

「如果輸入數組具有相同的字符串鍵,則該鍵的後面的值將覆蓋前一個鍵。」 http://php.net/manual/en/function.array-merge.php。在你的情況array_1是後者 – nogad

+0

謝謝@TheValyreanGroup –

回答

1

「如果輸入數組具有相同的字符串鍵,則該鍵的後續值 將覆蓋前一個鍵。」在你的情況array_1是 後者。

nogad

(鏈接到array_merge

而且還

你有},而不是一個括號。

如上所述TheValyreanGroup

這兩個都是絕對正確的。所以

$result = array_merge($array_1, $array_2); 

將解決您的問題。值交換,以便$array_2現在將覆蓋$array_1中的值。

爲了解決您想更新一些值的整體問題不知道該值,並要保留,我們正在減少與空的根本覆蓋值哪些條件,所以:

$array_2 = array_filter($array_2); //clears empty values 
$result = array_merge($array_1, $array_2); // as before. updates non-empty new values. 
+0

'''顯然是一個複製錯誤,否則腳本甚至不會運行,他根本得不到任何結果。 – Barmar

+0

那麼它會解決這個測試案例中的問題,但是在一般情況下期望的行爲大概是max得到了兩個值中的較大值,而不是二者中的第二個(即使在這裏交換它們也有幫助)。 –

+0

@Barmar好的,但我認爲仍然值得指出,由於錯別字往往是導致錯誤的關鍵,而且有習慣使用錯別字(並且沒有發現並糾正錯誤)的用戶將會有很多他們無法解決的代碼問題解決自己。 – Martin