【问题标题】:php array vote by values in arrayphp数组按数组中的值投票
【发布时间】:2014-10-13 13:17:26
【问题描述】:

我有一个包含许多值的数组,我想获得一个值是所有值的多个显示。像这样。

我的数组

$allValues = array(0,1,1);         // i want to get 1, because two 1 vs one 0

// other example
$allValue = array(0,0,0,1,1);      // I want to get 0, because three 0 vs two 1

// other example
$allValues = array(0,1);           // I want to get 0, because one 0 vs one 1 is 50:50 but 0 is first value

对不起,我的英语不好。

【问题讨论】:

标签: php arrays sorting


【解决方案1】:
<?php
$allValues = array(0,1,1);   

$result=array_count_values($allValues);   // Count occurrences of everything
arsort($result);                          // Sort descending order
echo key($result);                        // Pick up the value with highest number
?>

编辑:我使用了key(),因为您有兴趣了解出现次数最多的值,而不是数字本身。如果您只需要号码,您可以删除key() 电话。

Fiddle

【讨论】:

  • 最短高效的解决方案。竖起大拇指!
  • 我感觉这不是最短的。认为它可以进一步缩短:)
  • 好人,非常感谢@Hanky 웃 Panky。你的答案投赞成票
  • 第三个例子怎么样?这将返回 1 的 array(0, 1),而不是 OP 要求的 0。否则,一个巧妙的解决方案。
  • 我也可以继续编写代码,但你知道 OP 应该接受这个想法,然后自己构建它:) 否则它会变成一个复制粘贴工作,并且没有学习是 inovlved
【解决方案2】:

试试这个

$allValues = array(0,0,0,1,1); 
$count = array_count_values($allValues);
echo $val = array_search(max($count), $count);

【讨论】:

  • 此解决方案适用于所有输入,并且使用的代码少于接受的答案。做得好!但是,您应该分解您在此处所做的事情,这可能对每个人都立即显而易见。
  • @Antti29 是的,此代码适用于所有给定的输入,但它确实不使用的代码少于接受的答案。接受的答案使用 3 个函数调用和一个赋值,这个答案使用 3 个函数调用和 2 个赋值。仅仅因为一些函数调用是嵌套的,这不会减少代码吗。
  • @Hanky웃Panky 我认为对数组进行排序(特别是如果它变得非常大)比调用array_search() 和max() 更有效?您使用的作业少了一项,因为您只是在回显结果,而这个答案也可以做到这一点。
  • 是的,做一个基准测试,如果你喜欢这些数字,看看哪个答案更快。我为你设置了一个,但后来我删除了,因为那不是问题。您可以对这两个答案进行基准测试。
  • 我就是这样做的,发现结果在所有意图和目的上都是相同的(差异各不相同,并且在误差范围内)。如果您确实使用第三个示例输入返回 0,您的代码是否仍然一样快?
【解决方案3】:

仅适用于 0 和 1

function evaluateArray($array) {
    $zeros = 0;
    $ones  = 0;

    foreach($array as $item) {
        if($item == 0) {
            $zeros++;
        } else {
            $ones++;
        }
    }
    // Change this if you want to return 1 if the result is equal
    // To return ($ones >= $zeros) ? 1 : 0; 
    return ($zeros >= $ones) ? 0 : 1;
}

【讨论】:

    【解决方案4】:

    试试这个:

    function find_value($array) {
        $zeros = 0;
        $ones = 0;
        for($i = 0; $i < count($array); $i++) {
            ($array[$i] == 0) ? $zeros++ : $ones++;
        }
        if($zeros == $ones) return $array[0];
        return ($zeros > $ones) ? 0 : 1;
    }
    

    【讨论】:

      【解决方案5】:

      您可以使用 array_count_values — 计算数组的所有值

      <?php
      $array = array(1, "hello", 1, "world", "hello");
      print_r(array_count_values($array));
      ?>
      

      输出

      数组 ( [1] => 2 [你好] => 2 [世界] => 1 )

      【讨论】:

        猜你喜欢
        • 2021-12-09
        • 1970-01-01
        • 1970-01-01
        • 2013-11-15
        • 1970-01-01
        • 1970-01-01
        • 2019-01-13
        • 2018-11-05
        • 1970-01-01
        相关资源
        最近更新 更多