我有一张包含以下内容的表格:
我需要将数据提取到一个数组中,该数组只能包含没有重复键或值的日期。
第一个查询返回:
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) )
我试图通过这么多方式做到这一点而没有任何成功,任何人都可以看到这样做的方式。
答案 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
也可以