2014-02-24 132 views
0

所以我有幾個關聯的數組長度和關聯相等,需要對它們進行比較。如果第一個數組中的投票鍵有一個值,我需要用相同的值更新第二個數組中的投票鍵值。比較兩個關聯的數組,並根據比較結果更新一個

// create the arrays... 
$votes_array = []; 
array_push($votes_array, array(
    'id' => '1', 
    'voted' => '-1' 
    ) 
); 
array_push($votes_array, array(
    'id' => '1', 
    'voted' => '' 
    ) 
); 


$menu_array = []; 
array_push($menu_array, array(
    'id' => '1', 
    'voted' => '' 
    ) 
); 
array_push($menu_array, array(
    'id' => '1', 
    'voted' => '' 
    ) 
); 

我試過這個,但是甚至無法得到結果來回顯真實。

foreach ($votes_array as $votes_array_key => $votes_array_value) { 
    foreach ($menu_array as $menu_array_key => $menu_array_value) { 
     if($votes_array_key == 'voted' && ($votes_array_value == '1' || $votes_array_value == '-1')){ 
      echo 'true'; 
      // Update the $menu_array array index with the associated 'voted' value. 
     } 
    } 
} 

所以它最終會以$ menu_array [0] ['voted']爲'-1'結束。

我該如何做到這一點?

謝謝。

編輯: 我也修改了接受的答案,以迎合當votes_array的長度變化時。

foreach($votes_array as $votes_key => $votes_vote) { 
    if(! $votes_vote['voted']) 
    { 
     continue; 
    } 
    else 
    { 
     $getVoteId = $votes_array[$votes_key]['id']; 
     foreach($menu_array as $menu_key => $menu_vote) 
     { 
      if($menu_array[$menu_key]['id'] == $getVoteId) 
      $menu_array[$menu_key]['voted'] = $votes_vote['voted']; 
     } 

    } 
} 
+0

添加條件'if value ==「」'。代碼看起來很好,我認爲你的數組裏沒有'voted = 1'。 – soyuka

回答

1

假設這些都是字符串和數組的長度相等,就像你說的,這將是從頭頂簡單:

foreach($votes_array as $key => $vote) { 
     if(! $vote['voted']) continue; 
     $menu_array[$key]['voted'] = $vote['voted']; 
} 
+0

謝謝,它的工作! vote數組實際上是可變的(0-4個元素),而菜單數組主要有4個元素(兩者總是具有相同的關聯),但有時候這可能是三個。但我應該能夠弄清楚如何修改它以使其適用於此。 – Leke

+0

我已經將結果添加到上面作爲編輯提到的內容中。有可能是一種更優雅的方式來做到這一點,但它是:P – Leke

1

看來你設置你的voted鍵,因此使用IM清空而不是isset檢查一個非值。

foreach($votes_array as $key=>$vote) { 
    if (!empty($vote["voted"])) { 
     $menu_array[$key]["voted"] = $vote["voted"]; 
    } 
}