2013-03-19 60 views
2

如何比較2個數組並推送新值。如何比較2個數組並推送新值

也許題目是錯誤的,但我不知道該寫什麼,我希望它沒關係。

這是我的第一個數組。它包含了歐洲郵編多少成員有在郵編

數組1名爲$ Memcooltransactions

Array ( 
[0] => Array ([zipcode] => 1067 [city] => Copenhagen K [numberofuniqmembers] => 11) 
[1] => Array ([zipcode] => 0100 [city] => Tórshavn [numberofuniqmembers] => 1) 
) 

這是我的第二個陣列。它還包含歐洲郵政編碼多少餐館有在郵編

數組2名爲$ Rescooltransactions

Array ( 
[0] => Array ([zipcode] => 1067 [city] => Copenhagen K [numberofuniqplaces] => 1) 
[1] => Array ([zipcode] => 1074 [city] => København V [numberofuniqplaces] => 1) 
) 

這是我的代碼,這些陣列放在一起比較。

foreach ($Memcooltransactions as $key) 
{ 
    $uniqmember = $key['numberofuniqmembers']; 

    foreach ($Rescooltransactions as $key2) 
    { 
    $uniqres = $key2['numberofuniqspisesteder']; 

    if($key['zipcode'] === $key2['zipcode']) 
    { 

     $samlet = $uniqmember/$uniqres; 
     $sizeofuniqmem += $uniqmember; 
     $sizeofuniqres += $uniqres; 

     $array1[] = array(
     'zipcode' => $key['zipcode'], 
     'city' => $key['city'], 
     'numberofuniqmembers' => $uniqmember, 
     'numberofuniqspisesteder' => $uniqres, 
     ); 

    } 
    } 
} 

我的輸出。

Array ( [0] => Array ([zipcode] => 1067 [city] => Copenhagen K [numberofuniqmembers] => 11 [numberofuniqplaces] => 1) 

當我試圖抓住無法與新數組進行比較的值時,它會使站點崩潰。這就是爲什麼我從上面的foreach中刪除它。但是,如何在不使站點崩潰的情況下獲得理想的輸出?

所需的輸出

Array ( 
[0] => Array ([zipcode] => 1067 [city] => Copenhagen K [numberofuniqmembers] => 11 [numberofuniqplaces] => 1) 
[1] => Array ([zipcode] => 0100 [city] => Tórshavn [numberofuniqmembers] => 1 [numberofuniqplaces] => 0) 
[2] => Array ([zipcode] => 1074 [city] => København V [numberofuniqmembers] => 0 [numberofuniqplaces] => 1) 
) 

希望你能幫助:)

回答

1

你要做兩個循環,第一個初始化與第一陣列中的數據結果數組,而第二循環要添加的第二陣列中而不是在第一個數據。

喜歡的東西:

$result = array(); 
// first loop, initialize $result 
foreach ($Mem as $key) { 
    $result[] = array(
     'zipcode' => $key['zipcode'], 
     'city' => $key['city'], 
     'numberofuniqmembers' => $key['numberofuniqmembers'], 
     'numberofuniqplaces' => 0, 
    ); 
} 
$create = 1; 
// second loop, complete $result 
foreach ($Res as $key) { 
    $uniqres = $key['numberofuniqplaces']; 
    $i = 0; 
    foreach ($result as $key2) { 
     $uniqmember = $key2['numberofuniqmembers']; 
     if($key['zipcode'] === $key2['zipcode']) { 
      $result[$i] = array(
       'zipcode' => $key['zipcode'], 
       'city' => $key['city'], 
       'numberofuniqmembers' => $uniqmember, 
       'numberofuniqplaces' => $uniqres, 
      ); 
      $create = 1; 
      break; // <--- modified 
     } elseif ($create) { 
      $create = 0; 
      $result[] = array(
       'zipcode' => $key['zipcode'], 
       'city' => $key['city'], 
       'numberofuniqmembers' => 0, 
       'numberofuniqplaces' => $uniqres, 
      ); 
     } 
    } 
    $i++; 
} 
print_r($result); 

輸出:

Array 
(
    [0] => Array 
     (
      [zipcode] => 1067 
      [city] => Copenhagen K 
      [numberofuniqmembers] => 11 
      [numberofuniqplaces] => 1 
     ) 

    [1] => Array 
     (
      [zipcode] => 0100 
      [city] => Tórshavn 
      [numberofuniqmembers] => 1 
      [numberofuniqplaces] => 0 
     ) 

    [2] => Array 
     (
      [zipcode] => 1074 
      [city] => København V 
      [numberofuniqmembers] => 0 
      [numberofuniqplaces] => 1 
     ) 

) 
+0

雞毛撣子 - 我剛剛離開後發生:P – Emissary 2013-03-19 14:10:21

+0

@ M42 ..謝謝。但是有一個錯誤?爲什麼郵政編碼(1067)在您的輸出中出現兩次? – Zaz 2013-03-19 14:41:53

+0

雙重結果出現在結果中:/ – Zaz 2013-03-19 15:17:37

0

試試這個。它會將兩個陣列合併爲$newArray,並且不會包含重複項。

$newArray = Array(); 
foreach($arr1 as $k=>$val) 
{ 
    if(array_key_exists($k, $arr2)) 
    { 
     $newArray[$k] = array_merge($val, $arr2[$k]); 
    } 
} 
+0

此代碼無效。 – Zaz 2013-03-19 11:43:46

0

遲到了幾分鐘,但因爲它是可擴展無論如何,我會張貼此。我做了一些假設:

  • 市是唯一
  • 市可以有多個拉鍊碼
  • 鍵與兩個陣列integer相加在$arr2採取precidence
  • 否則值

-

function mergeLocations($arr1, $arr2){ 
    $tmp = array(); $keys = array(); $ret = array(); 
    foreach($arr1 as $loc) 
    foreach($loc as $key => $val) 
     if(isset($loc['city'])){ 
     if(!isset($tmp[$loc['city']])) 
      $tmp[$loc['city']] = array(); 
     $tmp[$loc['city']][$key] = $val; 
     $keys[] = $key; 
     } 
    foreach($arr2 as $loc) 
    foreach($loc as $key => $val) 
     if(isset($loc['city'])){ 
      if(!isset($tmp[$loc['city']])) 
      $tmp[$loc['city']] = array(); 
      $keys[] = $key; 
     } 
    $keys = array_unique($keys); 
    foreach($arr2 as $loc) 
    foreach($loc as $key => $val) 
     if(isset($loc['city'])) 
     if(!isset($tmp[$loc['city']][$key]) || !is_int($tmp[$loc['city']][$key])) 
      $tmp[$loc['city']][$key] = $val; 
     else 
      $tmp[$loc['city']][$key] += $val; 
    foreach($tmp as $key => $loc){ 
    foreach($keys as $k) 
     if(!isset($loc[$k])) 
     $loc[$k] = 0; 
    $ret[] = $loc; 
    } 
    return $ret; 
} 

Working Example