【问题标题】:Find how many numbers are greater than N in an array找出数组中有多少个数大于 N
【发布时间】:2018-06-25 05:37:46
【问题描述】:

如果我有一个索引 PHP 数组:

$array = array(2, 12, 23, 34, 36, 36, 36, 56);

我有一个变量:

$number = 30;

如何计算高于$number的“数组位置”的数量?

例如,函数应该返回5,因为有 5 个数字(34、36、36、36 和 56)大于 30。

编辑:我已经尝试过计算数组值的不同方法,但我不知道如何计算位置。把我难住了。

【问题讨论】:

标签: php


【解决方案1】:

也可以用

  • array_reduce — 使用回调函数迭代地将数组缩减为单个值

示例:

$array = array(2, 12, 23, 34, 36, 36, 36, 56);
$number = 30;

echo array_reduce($array, function($ret, $val) use ($number) {
    return $ret += $val > $number;
});

或者将数字硬编码到回调中

echo array_reduce($array, function($ret, $val) {
    return $ret += $val > 30;
});

【讨论】:

    【解决方案2】:

    作为另一种选择,使用array_filter() 从数组中删除不需要的元素,然后只使用count() 剩余列表...

    $array = array(2, 12, 23, 34, 36, 36, 36, 56);
    $number = 30;
    
    $gtn = array_filter($array, function($value) use ($number) { return $value > $number; });
    echo count($gtn); 
    

    $gtn 将包含数字(34, 36, 36, 36, 56),这可能对您代码中的其他内容有用。

    【讨论】:

      【解决方案3】:

      您不需要迭代整个数组。
      如果您首先对数组进行排序,那么一旦找到更大的数字,您就可以打破循环并使用那里的键值。

      $array = array(2, 12, 23, 34, 36, 36, 36, 56);
      Sort($array);
      $number = 30;
      
      Foreach($array as $key => $val) If($val >= $number) break;
      
      $larger = array_slice($array, $key);
      
      Echo count($larger) . "\n";
      Var_dump($larger);
      

      输出:

      5 //echo
      array(5) { // var_dump
        [0] => 34
        [1] => 36
        [2] => 36
        [3] => 36
        [4] => 56
      }
      

      https://3v4l.org/8FoOP

      【讨论】:

        【解决方案4】:

        您可以使用array_reduce 执行此任务:

        $array = array(2, 12, 23, 34, 36, 36, 36, 56);
        $number = 30;
        
        $cnt = array_reduce($array, function ($carry, $item) use ($number) {
          if ( $item > $number ) {
            $carry++;
          }
          return $carry;
        });
        
        echo $cnt;
        

        【讨论】:

          【解决方案5】:

          试试这个代码:

          function findGreaterNumberCount($array, $number) {
              $count = 0;
              foreach ($array as $value) {
                  if ($value > $number) {
                      $count++;
                  }
              }
              return $count;
          }
          
          echo findGreaterNumberCount(array(2, 12, 23, 34, 36, 36, 36, 56), 30);
          

          本平台不推荐写代码。所以你应该在问问题之前尝试一些事情。下次小心点。

          【讨论】:

          • 在我看来,任何没有任何努力的问题都不应该回答。这基本上将这减少为免费的编码服务,但事实并非如此。
          • 这个平台还要求答案包括描述,而不仅仅是“试试这个”
          【解决方案6】:

          使用数组减少并缩短代码

              $array = [2, 12, 23, 34, 36, 36, 36, 56];
                  $number = 30;
          
                  $totalNumberOfItems = array_reduce($array, function ($sum, $item) use ($number) {
                      if($item > $number)
                      $sum++;
                    return $sum;
                  });
          
          Var_dump($cnt);
          

          【讨论】:

            【解决方案7】:

            您可以使用 array_filter 迭代数组以找到最大的数组元素。

            $num = 30;
            $array = array(2, 12, 23, 34, 36, 36, 36, 56);
                $a = array_filter($array, function($value) use( $num ){
                        return $num < $value;
              });
             print_r($a);
            

            输出

               Array
                (
                    [3] => 34
                    [4] => 36
                    [5] => 36
                    [6] => 36
                    [7] => 56
                )
            

            【讨论】:

            • @SambhajiKatrajkar 代码只有答案在 SO 不被接受。像某些人那样只写“试试这个”并不是对代码的正确描述。在这个特定的答案中,一个很好的描述可能是“您可以使用 array_filter 并使其返回大于 30 的值”。但是只是什么都不说会使答案成为仅代码的答案,有些人认为它们没有用,因此对它们投反对票。 meta.stackoverflow.com/questions/345719/…
            • 我很确定 array_filter 可以迭代工作,所以在函数中添加 $num 意味着它会在数组的每个项目上重置。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-09-03
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-03-12
            相关资源
            最近更新 更多