比较两个关联的阵列并根据比较更新一个阵列

时间:2014-02-24 16:47:48

标签: php

所以我有几个相同长度和关联的关联数组,需要比较它们。如果第一个数组中的投票键具有值,我需要使用相同的值更新第二个数组中的投票键值。

// 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] ['voteed']为'-1'。

我如何实现这一目标?

感谢。

修改 我还修改了接受的答案,以便在投票时间长度变化时满足。

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

    }
}

2 个答案:

答案 0 :(得分:1)

假设这些字符串和数组的长度相同,就像你说的那样,从头顶开始这将是简单的:

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

答案 1 :(得分:1)

您似乎设置了voted个密钥,因此我使用而不是 isset 来检查非值。

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