2014-02-24 86 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"]; 
    } 
}