2016-09-16 107 views
0

我有包含以下的表:PHP合併兩個陣列沒有重複

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)) 

我試圖這樣做,所以很多方面不任何成功,任何人都可以看到這樣做的方式。

回答

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

+0

Blaatpraat工作,感謝您的非常有趣的答覆。當我使用「print_r($ array)」時,這肯定會給我一個所需數據的數組。我現在該如何使用這些數據來顯示行和列中的每個項目。 – DCJones

+0

Blaatpraat,我已經整理出如何獲取我的行和列的值,但每行都顯示相同的記錄。我使用foreach($ array作爲$ key => $ value){echo $ array [$ row ['UniqueID']] ['Room']; }。我是否正確地做這件事? – DCJones

0

如前所述,可以使用array_unique(),但只能在處理簡單數據時使用。對象不是很容易處理。

當php嘗試合併數組時,它會嘗試比較數組成員的值。如果一個成員是一個對象,它不能得到它的值,而是使用spl散列。

簡單地告訴你是否有兩個對象,即同一個類的實例,如果其中一個不是對另一個的引用 - 那麼最終會得到兩個對象,不管它們的屬性的值如何。

爲了確保您在合併數組中沒有任何重複,Imho您應該自行處理。

另外,如果您打算合併多維數組,請考慮使用array_merge_recursive()而不是array_merge()

array_unique(array_merge($array1,$array2), SORT_REGULAR); 

它也將不SORT_REGULAR