2016-09-16 4 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 as $ 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

Смежные вопросы