【问题标题】:How can i compare values within a multidimensional array如何比较多维数组中的值
【发布时间】:2017-11-29 23:08:10
【问题描述】:

我正在开发一个生物识别选举系统,但我在选举结果方面遇到了问题。

我在执行查询后得到了这个数组。

Array
(
    [paty1] => Array
        (
            [NA122] => stdClass Object
                (
                    [count] => 2
                )    

            [NA2] => stdClass Object
                (
                    [count] => 0
                )

                [NA56] => stdClass Object
                (
                    [count] => 1
                )

        )

    [party2] => Array
        (
            [NA122] => stdClass Object
                (
                    [count] => 0
                )

            [NA2] => stdClass Object
                (
                    [count] => 0
                )

            [NA56] => stdClass Object
                (
                    [count] => 0
                )

        )

)

这个数组存储在$data,它可以有无限的索引。

现在如果[Paty1][NA122] 的计数大于[Party2][NA122] 的计数,那么我将在NA122 中声明Party1 获胜,我必须将它与n 个索引进行比较。

例如还有另一个索引 pary3 所以首先我将比较 [party1][NA122][party2][NA122] 的计数,然后与 [party3][NA122] 比较,获胜者将是计数更大的人。你能帮帮我吗?

提前致谢

【问题讨论】:

    标签: php arrays loops multidimensional-array iteration


    【解决方案1】:

    你的意思是这样的:

    <?php
        $data=getData();
        $maxValue;
        $maxKey;
    
        foreach($data as $key => $paty)
                if(!isset($maxValue) || $paty->count>$maxValue){ 
                        $maxValue=$paty->count;
                        $maxKey=$key;
                }
        echo "$maxValue $maxKey";
    
        function getData(){
                $a=array();
                for($i=1;$i<100;$i++)
                        $a["paty$i"]=(object) array("count"=>$i);
                return $a;
        }
    ?>
    

    说明: getData 返回一个像你描述的那样的数组

    foreach($data as $key => $paty) - 遍历整个数组

    if ( ) -- 检查当前值是否大于前一个最大值

    如果您想了解更多关于 PHP 的信息: foreachobjectsarraysgoogle

    【讨论】:

      【解决方案2】:

      试试这个:

      foreach(current($Result) as $Const=>$val){
      
       echo "Winner of Constituency '$Const': ". findWinner($Const,$Result).PHP_EOL;
      
      }
      
      function findWinner($Const, $Result){
       $Max = 0;
       $Winner = '';
      
        foreach($Result as $Party => $ConstList){
           if($ConstList[$Const]->count>$Max){
              $Max = $ConstList[$Const]->count;
              $Winner = $Party;
           }
        }
       return $Winner;
      }
      

      在此处查看实时代码: https://www.tehplayground.com/x5sPu7JxuexOdwU8

      【讨论】:

      • 嘿,如果两方在特定选区的计数相同,您能建议应该怎么做吗?
      • 请参考:tehplayground.com/Uumj1xFwWvH3Vz17 - 您需要返回一个数组,如果该数组有多个元素 (coun(array)>1),则有多个获胜者。
      【解决方案3】:

      因此,您希望在给定的 NA# 下获得最大计数的派对。 你可以使用这样的函数:

      function maxParty($data, $na) {
          $max = null;
          foreach($data as $party => $values) {
              if(is_null($max)) {
                  $max = $party;
                  continue;
              } else {
                  if($values[$na]->count > $data[$max][$na]->count) {
                      $max = $party;
                  }
              }
          }
          return $max;
      }
      

      然后你给这个函数提供一个 $data 数组和你想用来计算最大派对的 NA#。例如

      $winner = maxParty($data, 'NA122');
      

      它将返回获胜方的密钥。 IE。 “派对1”

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-12-18
        • 2019-08-15
        • 2012-09-08
        • 2012-11-24
        • 1970-01-01
        • 2021-12-08
        • 1970-01-01
        相关资源
        最近更新 更多