2017-07-25 165 views
0

所以我有以下2個陣列,連鍵20162017陣列具有相同的密鑰的不要」合併覆蓋

array(2) { 
    [2016]=> 
    array(11) { 
    ["id"]=> 
    string(1) "0" 
    [0]=> 
    string(1) "0" 
    ["user_id"]=> 
    string(1) "0" 
    ["entry_id"]=> 
    int(0) 
    ["user_name"]=> 
    string(0) "" 
    [3]=> 
    string(0) "" 
    ["action"]=> 
    string(11) "banner view" 
    [4]=> 
    string(11) "banner view" 
    ["entry_details"]=> 
    string(0) "" 
    ["created"]=> 
    string(4) "2016" 
    ["total"]=> 
    int(0) 
    } 
    [2017]=> 
    array(11) { 
    ["id"]=> 
    string(1) "0" 
    [0]=> 
    string(1) "0" 
    ["user_id"]=> 
    string(1) "0" 
    ["entry_id"]=> 
    int(0) 
    ["user_name"]=> 
    string(0) "" 
    [3]=> 
    string(0) "" 
    ["action"]=> 
    string(11) "banner view" 
    [4]=> 
    string(11) "banner view" 
    ["entry_details"]=> 
    string(0) "" 
    ["created"]=> 
    string(4) "2017" 
    ["total"]=> 
    int(0) 
    } 
} 
array(1) { 
    [2017]=> 
    array(30) { 
    ["id"]=> 
    string(2) "52" 
    [0]=> 
    string(2) "52" 
    ["user_id"]=> 
    NULL 
    [1]=> 
    NULL 
    ["entry_id"]=> 
    string(1) "2" 
    [2]=> 
    string(1) "2" 
    ["user_name"]=> 
    NULL 
    [3]=> 
    NULL 
    ["action"]=> 
    string(11) "banner view" 
    [4]=> 
    string(11) "banner view" 
    ["entry_details"]=> 
    string(4) "null" 
    [5]=> 
    string(4) "null" 
    ["entry_type"]=> 
    string(6) "banner" 
    [6]=> 
    string(6) "banner" 
    ["created"]=> 
    string(19) "2017-06-21 10:25:49" 
    [7]=> 
    string(19) "2017-06-21 10:25:49" 
    ["ip"]=> 
    string(9) "127.0.0.1" 
    [8]=> 
    string(9) "127.0.0.1" 
    ["user_agent"]=> 
    string(121) "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36" 
    [9]=> 
    string(121) "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36" 
    ["browser"]=> 
    string(13) "Google Chrome" 
    [10]=> 
    string(13) "Google Chrome" 
    ["browser_version"]=> 
    string(2) "58" 
    [11]=> 
    string(2) "58" 
    ["os"]=> 
    string(28) "Mac OSX 10 (Unknown Version)" 
    [12]=> 
    string(28) "Mac OSX 10 (Unknown Version)" 
    ["total"]=> 
    string(3) "510" 
    [13]=> 
    string(3) "510" 
    ["date_only"]=> 
    string(4) "2017" 
    [14]=> 
    string(4) "2017" 
    } 
} 

現在,陣列合併後,我應該得到一個數組,2個鍵數據,20162017但是我得到一個有3個鍵的數組,它不會用相同的鍵覆蓋數組。

$final = array_merge($results,$results_from_db);

array(3) { 
    [0]=> 
    array(11) { 
    ["id"]=> 
    string(1) "0" 
    [0]=> 
    string(1) "0" 
    ["user_id"]=> 
    string(1) "0" 
    ["entry_id"]=> 
    int(0) 
    ["user_name"]=> 
    string(0) "" 
    [3]=> 
    string(0) "" 
    ["action"]=> 
    string(11) "banner view" 
    [4]=> 
    string(11) "banner view" 
    ["entry_details"]=> 
    string(0) "" 
    ["created"]=> 
    string(4) "2016" 
    ["total"]=> 
    int(0) 
    } 
    [1]=> 
    array(11) { 
    ["id"]=> 
    string(1) "0" 
    [0]=> 
    string(1) "0" 
    ["user_id"]=> 
    string(1) "0" 
    ["entry_id"]=> 
    int(0) 
    ["user_name"]=> 
    string(0) "" 
    [3]=> 
    string(0) "" 
    ["action"]=> 
    string(11) "banner view" 
    [4]=> 
    string(11) "banner view" 
    ["entry_details"]=> 
    string(0) "" 
    ["created"]=> 
    string(4) "2017" 
    ["total"]=> 
    int(0) 
    } 
    [2]=> 
    array(30) { 
    ["id"]=> 
    string(2) "52" 
    [0]=> 
    string(2) "52" 
    ["user_id"]=> 
    NULL 
    [1]=> 
    NULL 
    ["entry_id"]=> 
    string(1) "2" 
    [2]=> 
    string(1) "2" 
    ["user_name"]=> 
    NULL 
    [3]=> 
    NULL 
    ["action"]=> 
    string(11) "banner view" 
    [4]=> 
    string(11) "banner view" 
    ["entry_details"]=> 
    string(4) "null" 
    [5]=> 
    string(4) "null" 
    ["entry_type"]=> 
    string(6) "banner" 
    [6]=> 
    string(6) "banner" 
    ["created"]=> 
    string(19) "2017-06-21 10:25:49" 
    [7]=> 
    string(19) "2017-06-21 10:25:49" 
    ["ip"]=> 
    string(9) "127.0.0.1" 
    [8]=> 
    string(9) "127.0.0.1" 
    ["user_agent"]=> 
    string(121) "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36" 
    [9]=> 
    string(121) "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36" 
    ["browser"]=> 
    string(13) "Google Chrome" 
    [10]=> 
    string(13) "Google Chrome" 
    ["browser_version"]=> 
    string(2) "58" 
    [11]=> 
    string(2) "58" 
    ["os"]=> 
    string(28) "Mac OSX 10 (Unknown Version)" 
    [12]=> 
    string(28) "Mac OSX 10 (Unknown Version)" 
    ["total"]=> 
    string(3) "510" 
    [13]=> 
    string(3) "510" 
    ["date_only"]=> 
    string(4) "2017" 
    [14]=> 
    string(4) "2017" 
    } 
} 

這究竟是爲什麼?這是正常的嗎?

信息:PHP 30年6月5日(CLI)(建:2017年2月7日十六時十八分37秒)版權所有(C) 1997-2016的PHP集團Zend引擎V2.6.0,版權所有(C)1998用數字鍵輸入數組中2016 Zend技術

+0

閱讀手冊:_「但是,如果數組中包含數字鍵,後面的值不會覆蓋原始值,但會被追加。」_ http: //php.net/manual/en/function.array-merge.php –

+0

你的預期結果數組是什麼?哪個數組是'$ results',哪個是'$ results_from_db'? – mickmackusa

回答

2

值將隨遞增密鑰從零的結果陣列中開始重新編號。

http://php.net/manual/en/function.array-merge.php

+0

謝謝!你知道一個解決方案可以適用於我的情況嗎? – Uffo

+0

我認爲在這種情況下'array_replace'將會是一個更好的解決方案,謝謝你幫助我理解 – Uffo

0

array_replace()將覆蓋你的第一子陣2017年與第二:

var_export(array_replace($a,$b)); 


+操作,然後ksort()將這樣做:

$overwrite=$b+$a; 
ksort($overwrite); 
var_export($overwrite); 


一個demo link在那裏你可以在兩個數組變量功能發揮。

array_merge()array_merge_recursive()將導致3個子陣列。


即使你轉換鍵串像'2017'array_merge()仍然會像對待數字,你會得到3個子陣列。

如果您儘可能爲每個密鑰加上前綴#,那麼您可以按照預期使用array_merge()。在所有按鍵上嘗試#[year],您將有2個合併的子陣列。 (你可以在上面的演示鏈接中測試自己)