【问题标题】:How to make PHP for loop with condition?如何使用条件使 PHP for 循环?
【发布时间】:2015-04-19 18:11:39
【问题描述】:

我正在使用 PHP 创建带条件的循环,但结果不是我想要的。

您能提供的任何帮助都会很棒! :)

$cnt = array(
    "08.00","09.00","10.00"
);
$time = array(
    "07.00","08.00","09.00","10.00","11.00","12.00","13.00","14.00",
    "15.00","16.00","17.00","18.00","19.00","20.00","21.00","22.00"
);

这是我的循环代码:

for ($i = 0; $i < 16 ; $i++) {
    for ($j = 0; $j < 3 ; $j++) {
        if ($time[$i] == $cnt[$j]) {
            $button[$i] = 'disable';
        } else {
            $button[$i] = $time[$i];
        }
    }
}

结果是:

07.00 08.00 09.00 disable 11.00 12.00 13.00 14.00 15.00 16.00 17.00 18.00 19.00 20.00 21.00 22.00

而我想要的结果是:

07.00 disable disable disable 11.00 12.00 13.00 14.00 15.00 16.00 17.00 18.00 19.00 20.00 21.00 22.00

【问题讨论】:

  • 我想你在这里有很多答案。您可以接受您认为对您最有帮助并解决您的问题的唯一方法。 (meta.stackexchange.com/q/5234)

标签: php if-statement for-loop


【解决方案1】:

我会使用这样的东西:

$button = array();
foreach($time as $t) {
    if(in_array($t, $cnt, true)) {
        $button[]='disable';
    } else {
        $button[]=$t;
    }
}

循环遍历$time 数组的所有元素,并检查数组$cnt 是否包含相同的值。

由于您添加了具有递增索引的值,因此您可以使用数组推送运算符 []= 将值附加到 $button 数组。

详细了解in_array()http://php.net/manual/en/function.in-array.php[]=http://php.net/manual/en/function.array-push.php

【讨论】:

    【解决方案2】:

    您可能想尝试以下方法,它不是最佳的,但它会在使其正常工作的同时更改最少的代码:

    for ($i=0; $i < 16 ; $i++) { 
         if(in_array($time[$i], $cnt) {
              $button[$i]='disable';
         } else {
              $button[$i]=$time[$i];
         }
    }
    

    【讨论】:

      【解决方案3】:

      您的逻辑有缺陷 - 您在 $cnt 数组上循环并不断设置/替换您的禁用/时间值。考虑一下:

      $time -> looking at 08:00
      

      在 $cnt 上循环:

      08:00 -> matches -> set $button[$i] to disabled
      09:00 -> no match -> set $button[$i] to $time[$i]
      10:00 -> no match -> set $button[$i] to $time[$i]
      

      你的内部循环是破坏性的——你只保存了 $cnt 中最后一项的比较测试结果,因此你的“早期”测试结果被破坏了。

      你应该拥有的是:

      foreach($time as $idx => $val) {
          if (in_array($val, $cnt)) {
              $button[$idx] = 'disabled');
          } else {
              $button[$idx] = $val;
          }
      }
      

      【讨论】:

        【解决方案4】:

        只需添加一个'break;'在内循环中。见下文,

                for ($i=0; $i < 16 ; $i++) { 
                    for ($j=0; $j < 3 ; $j++) { 
                        if($time[$i]==$cnt[$j]){
                            $button[$i]='disable';
                            break;
                        }else{
                            $button[$i]=$time[$i];
                        }   
                    }
                }
        

        【讨论】:

          【解决方案5】:

          使用 PHP in_array:

          for ($i=0; $i < 16 ; $i++) { 
              if(in_array( $time[$i], $cnt ){
                  $button[$i]='disable';
              }else{
                  $button[$i]=$time[$i];
              }   
          }
          

          【讨论】:

            【解决方案6】:

            很多答案显示了这样做的方法,但也有功能方法:

            $button = array_map(
                function ($item) use ($cnt) {
                    return in_array($item, $cnt) ? 'disable' : $item;
                },
                $time
            );
            

            【讨论】:

            • 没有你的答案那么短,你会得到的错误列表
            • @Rizier123 什么意思?
            • @hek2mgl 如果您查看他的答案的第一版,您会发现他没有使用globaluse()。现在他神奇地去了global $cnt;,然后又去了use($cnt)我想知道他从哪里得到这个
            • @Rizier123 可能你们俩几乎同时有相同的想法(一个好想法)。始终保持诚信!
            【解决方案7】:

            这应该适合你:

            (这里我用array_map()检查$time的每个元素,并检查它是否在$cntin_array()的数组中。如果它在数组中,我用我使用的替换替换它use() 从父作用域继承它,如果不是,我再次分配值)

            <?php
            
                $cnt = array("08.00", "09.00", "10.00");
                $time = array("07.00", "08.00", "09.00", "10.00", "11.00", "12.00", "13.00", "14.00", "15.00", "16.00", "17.00", "18.00", "19.00", "20.00", "21.00", "22.00");  
                $replacement = "disabled";
            
                $time = array_map(function ($v) use ($cnt, $replacement) {
                    return (in_array($v, $cnt) ? $replacement : $v);
                }, $time);
            
                print_r($time);
            
            ?>
            

            输出:

            Array ( [0] => 07.00 [1] => disabled [2] => disabled [3] => disabled [4] => 11.00 [5] => 12.00 [6] => 13.00 [7] => 14.00 [8] => 15.00 [9] => 16.00 [10] => 17.00 [11] => 18.00 [12] => 19.00 [13] => 20.00 [14] => 21.00 [15] => 22.00 )
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-01-23
              • 2019-01-06
              • 2021-08-18
              • 2015-10-22
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多