【问题标题】:PHP - Check if current array number is >= then the last onePHP - 检查当前数组编号是否 >= 然后是最后一个
【发布时间】:2016-10-11 11:15:50
【问题描述】:

你好,我是这个论坛的新人。

我想知道是否有人可以在这里帮助我。 我目前正在关注 IT 研究,而我遇到的问题之一是 PHP 编程。我目前对以下问题有疑问。

问题:创建一个检查数组中的值(数字)的函数。如果当前值大于或等于之前的值,它应该回显为真。如果不是,则回显 false。

真实例子: $array = array (1,2,2,3,4) 这应该说 4 次正确,因为它变得更大并且数字保持不变。

错误示例: $array = array (1,2,1,4) 这应该说是假的,因为数字正在下降。

我编写了以下代码,它总是会返回“true”。

$input = array (1,4,2,7);

function trueorfalse (array $input){

    foreach ($input as $key => $value){
        $value >= $key[0];
        print "true";
    }
 }

trueorfalse($input);

我不知道如何将 foreach 循环所在的当前值与之前的值进行比较。有什么想法吗?

PS:PHP 对我来说是新的,我真的很难弄清楚如何想出解决问题的想法。

真诚的,

乔伊·本宁 IT 学生 Windesheim Zwolle(荷兰)。

【问题讨论】:

  • 如果您需要检查之前的值,为什么还要检查数组键? - 我强烈建议你阅读一些基本 PHP / 数组的教程。

标签: php arrays function


【解决方案1】:

这将是我直接的方法:

<?php
function isHigherOrEquals (array $input) {
    $result = true;
    $previous = PHP_INT_MIN;
    foreach ($input as $value) {
        if (!($value >= $previous)) {
            return false;
        }
        $previous = $value;
    }
    return $result;
}
var_dump(isHigherOrEquals([1,4,2,7]));
var_dump(isHigherOrEquals([1,4,6,7]));
var_dump(isHigherOrEquals([1,1,1]));
var_dump(isHigherOrEquals([]));

输出明显是:

bool(false)
bool(true)
bool(true)
bool(true)

【讨论】:

    【解决方案2】:

    不是最有效或最容易理解的方法,但 yay 用于数组缩减:

    $result = array_reduce($input, function (array $carry, $num) {
        return [$carry[0] && $num >= $carry[1], $num];
    }, [true, PHP_INT_MIN])[0];
    
    echo $result ? 'true' : 'false';
    

    替代方案:

    $result = is_int(array_reduce($input, function ($previous, $current) {
        return is_int($previous) && $current >= $previous;
    }, PHP_INT_MIN));
    
    echo $result ? 'true' : 'false';
    

    【讨论】:

    • 我也做那种事 ;-/ 这让我笑了 :)
    • 这就是我来这里的目的,瑞恩,这就是我来这里的全部目的...... :o)
    【解决方案3】:

    你可以设置临时变量

    <?php
    
    $array = array(1, 2, 2, 3, 4);
    
    $temp = $array[0];
    
    $val = true;
    
    foreach ($array as $key) {
    
        if ($key < $temp) {
            $val = false;
            break;
        } else {
            $temp = $key;
        }
    
    }
    
    var_dump($val);
    

    你可以用字符串“true”和“false”替换true和false,然后回显它而不是var_dump

    【讨论】:

    • 当我在内部创建一个函数时,它似乎可以工作,谢谢。但我试图弄清楚你的代码发生了什么。我的看法。您将 $array 的所有值放入 $temp 的第一个键中?并检查 $key 是否小于 $temp,如果是,则返回“false”,否则返回 true?
    • 我将 $array 的第一个值放在 $temp 中(temp 不是数组,它只是当时保存一个值的变量)。所以我将第一个值放入 temp 并检查它是否更小(然后我们可以将 value 设置为 false 并停止检查其他值),如果不是,我将 value 分配给 temp 并检查下一次给我 foreach 的值是否更小等等。如果每次都更大,我们永远不会分配 false,所以我们的 val 保持为 true
    • 它放第一个值并与第一个比较(只是为了更简洁的代码,我们几乎不会失去任何性能能力),然后是第二个,然后是第三个等等。
    【解决方案4】:
    $array = array (1,2,1,4);
    $lastChecked = 0;//we need to store the last checked value
    
    foreach($array as $key => $value)
    {
        //compare the current array value with the last stored one
        if($value >= $valastCheckedue)
        {
            echo "True<br>";
        }else{
                 echo "False<br>";
             }
    
        //store the current checked value from the array
        $lastChecked = $value;
    
    }
    

    将输出:

    正确
    真的
    假的
    真的

    【讨论】:

      【解决方案5】:

      给你。

      我使用了一个 for 循环。比较数组中的多个元素时更容易。如果您是新手/没有编码经验,我建议您使用 PHP。 PHP 是我最早学习的语言之一,它并不太难。一旦你熟悉了编码,我就会转向面向对象的语言,比如 C、C++、Java。 PHP 很好,但它是一种脚本语言,有两种编程语言的经验是很好的。

      希望这会有所帮助。

      <?php
      function CheckArray($arrayToCheck) {
          for ($i = 1; $i < count($arrayToCheck); $i++) {
              echo(($arrayToCheck[$i]>=$arrayToCheck[$i-1]? $arrayToCheck[$i].">=".$arrayToCheck[$i-1].": True<br />" : $arrayToCheck[$i].">=".$arrayToCheck[$i-1].": False<br />"));
          }
      }
      
      $array = array(1, 2, 3, 4, 5, 4, 3, 2, 1);
      CheckArray($array);
      
      ?>
      

      【讨论】:

        【解决方案6】:

        此函数检查数组中从第二个值开始的所有值。

        for($i = 1; $i < sizeof($input); $i++) 
        {
            //We check if the value is greater or equal than the one before
            if($input[$i] >= $input [$i-1])
                //If it is true, we'll display it
                echo "True";
            //Else, we display false
            else
                echo "False";
        }
        

        【讨论】:

          【解决方案7】:

          你只是忘记了 if:

          $input = array (1,4,2,7);
          function trueorfalse (array $input)
          {
             foreach ($input as $key => $value){
                 if ($value >= $key[0])
                     print "true";
             }
           }
          
          trueorfalse($input);
          

          编辑:我及时切换到 for 循环:

          function trueorfalse (array $input)
          {
              for($i = 0; $i < sizeof($input)-1;$i++)
              {
                  echo "$input[$i] >= {$input[$i+1]} => ";
                  echo ($input[$i] >= $input[$i+1]) ? "true <br>" : "false <br>";
              }
          
          }
          

          【讨论】:

          • $key[0] 将始终引用同一个键
          • 它仍然返回 true 4x。我认为是因为所有值都大于第一个键。
          • 如果你想要什么$value &gt;= $input[$key - 1]...
          • 我做了一些更改,我认为代码现在可以工作了
          猜你喜欢
          • 2011-08-30
          • 1970-01-01
          • 1970-01-01
          • 2019-02-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-02-20
          相关资源
          最近更新 更多