使用PHP与2个foreach循环中的数组进行比较时如何获取迭代次数

Posted

技术标签:

【中文标题】使用PHP与2个foreach循环中的数组进行比较时如何获取迭代次数【英文标题】:How to get iteration count when comparing to arrays in 2 foreach loops using PHP 【发布时间】:2022-01-12 22:03:36 【问题描述】:

我有 2 个数组想要获得总票数。数组 1 是用户提案,数组 2 是用户对提案的投票。我正在尝试比较 2 并计算每个提案的总票数。

这是 2 个数组 -

$props = json_decode('["proposal":"proposal 1", "owner":"tom", "lock_time":1639440607,"proposal":"proposal 2", "owner":"bob", "lock_time":1639455554]', true);

$votes = json_decode('["vote":"approve", "owner":"tom", "prop-id":1639440607,"vote":"reject", "owner":"bob", "prop-id":1639455554,"vote":"reject", "owner":"tom", "prop-id":1639440607]', true);

想要的输出如下-

Proposal 1 = 1 Approve and 1 Reject
Proposal 2 = 0 Approve and 1 Reject

我得到的输出是 -

Proposal 1 = 1 Approve and 1 Reject
Proposal 2 = 1 Approve and 1 Reject

这是我的尝试,但没有提供所需的输出 -

foreach($props as $props)

    $lock_time = $props['lock_time'];
    $my_proposal = $props['proposal'];

    foreach($votes as $votes)

        $id = $votes['prop-id'];
        $vote = $votes['vote'];

        if($lock_time == $id)
           if($vote == 'approve')
               $yay++;
           elseif($vote == 'reject')
               $nay++;
           
        
    

    echo 'Proposal: '.$my_proposal.'<br>';
    echo 'yay:: '.$yay.'<br>';
    echo 'nay:: '.$nay.'<br>';
    echo '<br><br>';

 

这是我的演示 - http://sandbox.onlinephpfunctions.com/code/abea2fa828c067ce3efc1440af201fce839645b6

【问题讨论】:

【参考方案1】:

在这块 if($vote == 'approve') $yay++; elseif($vote == 'reject') $nay++;

您需要重置每个提案的值,因此应该是这样的:

foreach($props as $props)

    $lock_time = $props['lock_time'];
    $my_proposal = $props['proposal'];
    $yay=0;
    $nay=0;
    foreach($votes as $vote)

        $id = $vote['prop-id'];
        $theVote = $vote['vote'];

        if($lock_time == $id)
            if($theVote == 'approve')
                $yay++;
            elseif($theVote == 'reject')
                $nay++;
            

        
    
    
    echo 'Proposal: '.$my_proposal.PHP_EOL;
    echo 'yay:: '.$yay.PHP_EOL;
    echo 'nay:: '.$nay.PHP_EOL;
    echo PHP_EOL;

【讨论】:

是的,非常感谢你:-) 欢迎,如果它的工作接受答案PLZ @RyanD,是的,我很惊讶提案的拒绝数不是 2,因此。 我不得不等待几分钟才能接受,现在接受了,再次感谢!你是对的,有 2 次拒绝和 1 次批准,我在预期的输出中弄错了。很好的收获。

以上是关于使用PHP与2个foreach循环中的数组进行比较时如何获取迭代次数的主要内容,如果未能解决你的问题,请参考以下文章

php foreach怎样获取当前的循环次数

PHP中使用foreach循环读取数组数据的方法

php foreachwhile性能比较

PHP 数组遍历方法大全(foreach,list,each)

PHP中如何使用foreach结构遍历数组?

foreach与for的区别