2017-03-07 74 views
0

我有一個包含一些條目的數組。我用「dummydata」替換了真實的數據。但是「dummydata」與array [0]和array [1]的值相同。正如你所看到blelow有一些關鍵的一些差異:如何組合 - 在數組中覆蓋鍵值對

Array 
(
    [0] => Array 
     (
      [contact_id] => dummydata 
      [customer_code] => dummydata 
      [customer_name] => dummydata 
      [territory] => dummydata  
      [firstname] => dummydata 
      [lastname] => dummydata 
      [contact_type_description] => dummydata 
      [contact_is_primary] => 1 
      [mailing_street] => dummydata 
      [mailing_postal_code] => dummydata 
      [mailing_city] => dummydata 
      [mailing_country] => dummydata 
      [email] => dummydata 
      [mobile_phone] => dummydata 
      [phone] => dummydata 
      [is_processed] => 0 
      [exact_email_found] => 0 
      [half_email_found] => 0 
      [possible_by_postal_code] => 1 // * Keep this line but look below 
      [found_first_name] => 0 
      [found_last_name] => 0 // * Keep this line but look below 
     ) 

    [1] => Array 
     (
      [contact_id] => dummydata 
      [customer_code] => dummydata 
      [customer_name] => dummydata 
      [territory] => dummydata 
      [firstname] => dummydata 
      [lastname] => dummydata 
      [contact_type_description] => dummydata 
      [contact_is_primary] => 1 
      [mailing_street] => dummydata 
      [mailing_postal_code] => dummydata 
      [mailing_city] => dummydata 
      [mailing_country] => dummydata 
      [email] => dummydata 
      [mobile_phone] => 
      [phone] => dummydata 
      [is_processed] => 0 
      [exact_email_found] => 0 
      [half_email_found] => 0 
      [possible_by_postal_code] => 0 // * HERE is the difference 
      [found_first_name] => 0 
      [found_last_name] => 1 // * HERE is the difference with the above 
     ) 

    [2] => Array // No need to look it's just to show that array continues 
     (
      [contact_id] => dummydata-different 
      [customer_code] => dummydata-different 
      [customer_name] => dummydata-different 
      [territory] => dummydata-different 
      [firstname] => dummydata-different 
      [lastname] => dummydata-different 
      [contact_type_description] => dummydata-different 
      [contact_is_primary] => 0 
      [mailing_street] => dummydata-different 
      [mailing_postal_code] => dummydata-different 
      [mailing_city] => dummydata-different 
      [mailing_country] => dummydata-different 
      [email] => 
      [mobile_phone] => 
      [phone] => 
      [is_processed] => 0 
      [exact_email_found] => 0 
      [half_email_found] => 0 
      [possible_by_postal_code] => 0 
      [found_first_name] => 1 
      [found_last_name] => 0 
     ) 

我怎樣才能使上述陣列合併所有相同的數據,但覆蓋的是不同的人。例如我試圖結果實現:

Array 
(
    [0] => Array 
     (
      [contact_id] => dummydata 
      [customer_code] => dummydata 
      [customer_name] => dummydata 
      [territory] => dummydata  
      [firstname] => dummydata 
      [lastname] => dummydata 
      [contact_type_description] => dummydata 
      [contact_is_primary] => 1 
      [mailing_street] => dummydata 
      [mailing_postal_code] => dummydata 
      [mailing_city] => dummydata 
      [mailing_country] => dummydata 
      [email] => dummydata 
      [mobile_phone] => dummydata 
      [phone] => dummydata 
      [is_processed] => 0 
      [exact_email_found] => 0 
      [half_email_found] => 0 
      [possible_by_postal_code] => 1 // * This becomes one from the merging 
      [found_first_name] => 0 
      [found_last_name] => 1 // * This becomes one from the merging 
     ) 


    [1] => Array 
     (
      [contact_id] => dummydata-different 
      [customer_code] => dummydata-different 
      [customer_name] => dummydata-different 
      [territory] => dummydata-different 
      [firstname] => dummydata-different 
      [lastname] => dummydata-different 
      [contact_type_description] => dummydata-different 
      [contact_is_primary] => 0 
      [mailing_street] => dummydata-different 
      [mailing_postal_code] => dummydata-different 
      [mailing_city] => dummydata-different 
      [mailing_country] => dummydata-different 
      [email] => 
      [mobile_phone] => 
      [phone] => 
      [is_processed] => 0 
      [exact_email_found] => 0 
      [half_email_found] => 0 
      [possible_by_postal_code] => 0 
      [found_first_name] => 1 
      [found_last_name] => 0 
     ) 

嘗試不同的事情由PHP提供的,但是這讓我困惑的功能。

+0

究竟你想要做什麼?保持值爲1的記錄並覆蓋,如果一個數組中的值爲0,另一個表中的值爲1?或者替換整個數組? – jilesh

+0

我想你將不得不手動檢查/合併它們,因爲所有函數都不能「知道或猜測」哪個數組的哪個值「獲勝」。 –

+0

@jilesh我想「合併」數組[0]和數組[1],因此它變成數組[0],但該數組[0]被覆蓋。更具體地說,數組[0]具有'「found_last_name」=>「0」,但數組[1]具有'「found_last_name」=>「1」'。我想要創建的新數組具有'「found_last_name」=>「1」',另一個重複被刪除。 –

回答

0

我說保持簡單(和快速)

foreach ($arr[0] as $k=>$v) { 
    if ($v > $arr[1][$k]) $arr[1][$k] = $v; 
} 

array_shift($arr); 

注意:如果要比較的兩個項目是不是在數組的開頭,使用unsetarray_values代替array_shift

+0

工作正常!但是如果一個入口不在下一個位置會發生什麼?你可以編輯它,以便它可以工作,即使它是隨機的? –

+0

@AntonisTsimourtos:我爲這些案例增加了一個通知,但顯然你需要事先知道你想要比較的項目。 –

+0

我想它會工作,如果我通過他們的'contact_id'權利排序他們? –

0

你可以這樣說:

$result = array_map("unserialize", array_unique(array_map("serialize", $input_array))); 

$input_array是有重複值的數組。

所以這裏基本上發生的是,第一個數組被轉換爲單維數組,然後重複值被刪除,然後再被轉換爲多維。

+0

沒有太大的工作。 array_unique是否有一個說明符? –

+0

@AntonisTsimourtos我不好意思,我沒有看到在前兩個數組中鍵值的一個是不同的。這僅適用於所有密鑰相同的情況。但是,你正在努力實現的目標是不可能的。例如,在你想要的結果中,對於兩個數組,'is_processed'都是0,所以根據邏輯它們都應該被合併,因爲早先的數組與'dummydata'合併。我想你只希望它們被合併,因爲'is_process'對於所有的特定字段是相同的。 – Zeus