PHP合并两个没有重复的数组

时间:2016-09-16 11:21:53

标签: php arrays

我有一张包含以下内容的表格:

enter image description here

我需要将数据提取到一个数组中,该数组只能包含没有重复键或值的日期。

第一个查询返回:

Array ( 
[0] => Array ( [UniqueID] => NXLHR01011474021550 [Room] => 0101 [AuditBy] => navexdemo2 [AuditDate] => 2016-09-16 11:26:00 [SeqID] => SeqID1306 [Status] => 1 [WaterHot] => 67.0 ) 
[1] => Array ( [UniqueID] => NXLHR01011474021550 [Room] => 0101 [AuditBy] => navexdemo2 [AuditDate] => 2016-09-16 11:26:00 [SeqID] => SeqID1307 [Status] => 0 [WaterHot] => ) 
[2] => Array ( [UniqueID] => NXLHR01021474021587 [Room] => 0102 [AuditBy] => navexdemo2 [AuditDate] => 2016-09-16 11:26:00 [SeqID] => SeqID1306 [Status] => 0 [WaterHot] => 65.0 ) 
[3] => Array ( [UniqueID] => NXLHR01021474021587 [Room] => 0102 [AuditBy] => navexdemo2 [AuditDate] => 2016-09-16 11:26:00 [SeqID] => SeqID1307 [Status] => 1 [WaterHot] => ) ) 

然后我使用:

do {
    $Fields1[] = $row_Water1; 
} while ($row_Water1 = mysql_fetch_assoc($Water1));

第二个查询返回:

Array ( 
[0] => Array ( [UniqueID] => NXLHR01011474021550 [Room] => 0101 [AuditBy] => navexdemo2 [AuditDate] => 2016-09-16 11:26:00 [SeqID] => SeqID1306 [Status] => 1 [WaterCold] => ) 
[1] => Array ( [UniqueID] => NXLHR01011474021550 [Room] => 0101 [AuditBy] => navexdemo2 [AuditDate] => 2016-09-16 11:26:00 [SeqID] => SeqID1307 [Status] => 0 [WaterCold] => 18.0 ) 
[2] => Array ( [UniqueID] => NXLHR01021474021587 [Room] => 0102 [AuditBy] => navexdemo2 [AuditDate] => 2016-09-16 11:26:00 [SeqID] => SeqID1306 [Status] => 0 [WaterCold] => ) 
[3] => Array ( [UniqueID] => NXLHR01021474021587 [Room] => 0102 [AuditBy] => navexdemo2 [AuditDate] => 2016-09-16 11:26:00 [SeqID] => SeqID1307 [Status] => 1 [WaterCold] => 21.0 ) ) 

然后我使用:

do {
    $Fields2[] = $row_Water2; 
} while ($row_Water2 = mysql_fetch_assoc($Water2));

$Fields1$Fields2都包含我准备合并的数据。

然后我使用$Water = array_unique (array_merge ($Fields1, $Fields2));尝试创建一个不包含重复键或值的数组。当我运行脚本时,新的合并数组包含:

Array ( 
[0] => Array ( [UniqueID] => NXLHR01011474021550 [Room] => 0101 [AuditBy] => navexdemo2 [AuditDate] => 2016-09-16 11:26:00 [SeqID] => SeqID1306 [Status] => 1 [WaterHot] => 67.0 ) ) 

我的问题是如何生成合并数组以包含以下内容:

    Array ( 
[0] => Array ( [UniqueID] => NXLHR01011474021550 [Room] => 0101 [AuditBy] => navexdemo2 [AuditDate] => 2016-09-16 11:26:00 [SeqID] => SeqID1306 [Status] => 1 [WaterHot] => 67.0 [SeqID] => SeqID1307 [WaterCold] => 18.0) ) 
[1] => Array ( [UniqueID] => NXLHR01021474021587 [Room] => 0102 [AuditBy] => navexdemo2 [AuditDate] => 2016-09-16 11:26:00 [SeqID] => SeqID1306 [Status] => 1 [WaterHot] => 65.0 [SeqID] => SeqID1307 [WaterCold] => 21.0) ) 

我试图通过这么多方式做到这一点而没有任何成功,任何人都可以看到这样做的方式。

2 个答案:

答案 0 :(得分:1)

通过你给出的例子,我可以想到这样的事情:

$array = array();

foreach ($Fields1 as $row) {
    if (!isset($array[$row['UniqueID']])) {
        $array[$row['UniqueID']] = $row;
    } else {
        if (!is_null($row['WaterHot'])) {
            $array[$row['UniqueID']]['WaterHot'] = $row['WaterHot'];
        }

        if (!is_null($row['WaterCold'])) {
            $array[$row['UniqueID']]['WaterCold'] = $row['WaterCold'];
        }
    }
}

foreach ($Fields2 as $row) {
    if (!is_null($row['WaterHot'])) {
        $array[$row['UniqueID']]['WaterHot'] = $row['WaterHot'];
    }

    if (!is_null($row['WaterCold'])) {
        $array[$row['UniqueID']]['WaterCold'] = $row['WaterCold'];
    }
}

非常简单,并合并WaterHot和WaterCold字段,其中UniqueID列是唯一键。
UniqueID列也将是合并数组的键。如果您不想要这个,并且想要一个数字列,则需要在结果数组上使用array_values

答案 1 :(得分:0)

如前所述,可以使用jQuery,但仅限于处理简单数据时。对象不是那么容易处理。

当php尝试合并数组时,它会尝试比较数组成员的值。如果成员是一个对象,则它无法获取其值并使用spl散列。

简单地告诉你,如果你有两个对象,同一个类的实例,如果其中一个不是对另一个的引用 - 你将最终得到两个对象,无论它们的属性值如何。

为了确保合并数组中没有任何重复项,Imho你应该自己处理这个案例。

此外,如果您要合并多维数组,请考虑使用array_unique()而不是array_merge_recursive()

array_merge()

没有SORT_REGULAR

也可以