如何在数组中组合 - 覆盖钥匙值对



我有一个带有一些条目的数组。我已经用" Dummydata"替换了真实数据。但是" dummydata"是数组[0]和数组[1]的值。如您所见,某些键有一些差异:

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提供的功能尝试了不同的事情,但这让我感到困惑。

我说保持简单(和快速)

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

注意:如果您要比较的两个项目不在数组的开头,请使用unsetarray_values代替array_shift

您可以这样做:

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

$input_array是具有重复值的数组。

因此,基本上发生的是第一个数组被转换为单维数组,然后删除了重复的值,然后再次将其转换为多维一个。

最新更新