2016-09-16 4 views
0

Iは、以下を含むテーブルを有するマージ。PHPは重複せずに二つの配列

最初のクエリ戻り値:

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

Iは次に使用:

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

2番目のクエリが返す:

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

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 = 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']; 
    } 
} 

を、とのUniqueID列が一意のキーであるWaterHotとWaterColdフィールドを、マージします。
UniqueID列は、マージされた配列のキーにもなります。これを望まず、数字の列が必要な場合は、結果の配列にarray_valuesを使用する必要があります。

+0

Blaatpraatせずに動作しますが、あなたの非常に興味深い返信いただきありがとうございます。これは確かに私が "print_r($ array)"を使うときに必要なデータを配列に渡してくれます。このデータを使用して、行と列の各項目を表示する方法 – DCJones

+0

Blaatpraat、私は行と列に値を取得する方法を整理しましたが、各行は同じレコードを表示します。私はforeachを使用しています($ array = $ value)$ {$ row ['UniqueID']] ['Room']; }。私はこれを正しくしていますか? – DCJones

0

すでに述べたように、array_unique()を使用することができますが、単純なデータを扱う場合にのみ使用してください。オブジェクトはそれほど単純ではありません。

phpが配列をマージしようとすると、配列メンバの値を比較しようとします。メンバがオブジェクトの場合は、値を取得できず、代わりにsplハッシュを使用します。

非常に同じクラスのインスタンスが2つあり、そのうちの1つが他のオブジェクトへの参照でない場合は、そのプロパティの値に関係なく、2つのオブジェクトが存在することになります。

マージされた配列内に重複がないことを確認するには、Imhoが自分でケースを処理する必要があります。

また、多次元配列をマージする場合はarray_merge_recursive()array_merge()よりも使用することを検討してください。

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

またSORT_REGULAR

関連する問題