【问题标题】:PHP foreach with counter and IF statement带有计数器和 IF 语句的 PHP foreach
【发布时间】:2013-11-20 22:05:32
【问题描述】:

我试图在 PHP 中使用 FOREACH 循环来根据数组中值的位置输出不同的消息。我的代码如下:

$qtyValidFiles = count($validFiles);
$tick = 0;
                 foreach($validFiles AS $validItem)
                {
                    if($tick = 0)
                    {
                    echo"'#$validItem,";
                    }
                    elseif($tick < $qtyValidFiles -1 && $tick != 0)
                    {
                    echo"#$validItem,";
                    }
                    elseif($tick = $qtyValidFiles -1)
                    {
                    echo"#$validItem'";
                    }
                }; $tick++;

在本例中,$qtyValidFiles 有 4 个值。

上面的代码返回:

#Games'#Movies'#Music'#TV' 

这向我表明$tick 始终被视为价值3

【问题讨论】:

  • 在 if 语句中使用 $tick == 0
  • 比较运算符是==
  • 你在循环外增加$tick
  • 哈哈,我刚刚看到你在做什么。查看我的编辑implode()
  • 非常感谢大家

标签: php if-statement foreach counter


【解决方案1】:

如果$validFiles 是一个索引数组,你可以这样做:

foreach ($validFiles as $tick => $validItem)

而不是自己增加$tick

不过,您的整个循环是不必要的。你可以这样做:

echo "'" . implode(",", array_map(function($x) { return "#$x"; }, $validFiles)) . "'";

这应该比您的代码更好,因为如果数组正好有 1 个项目,您就不会做正确的事情;您将打印开头的引号和逗号,但我认为您确实想要一个被引号包围的元素。

【讨论】:

    【解决方案2】:

    $tick 始终为0,因为$tick++; 在循环之外。向上移动一行。

    也如Rahul Kumar 所述,使用 == 作为比较运算符。

    或者直接这样做,不需要循环:

    echo '#' . implode(',#', $validFiles);
    

    【讨论】:

      【解决方案3】:

      似乎与您的代码更简单且正确的等价物是这样的:

      $qtyValidFiles = count($validFiles);
      $str = '';
      foreach($validFiles AS $validItem) {
         $str .= "#$validItem,";
      }
      if (!empty($str)) {
         echo "'" . substr($str, 0, -1) . "'"; //removes the last ","
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-12-12
        • 2012-06-20
        • 1970-01-01
        • 2017-09-27
        • 1970-01-01
        • 2012-06-22
        • 2020-03-20
        • 2017-01-13
        相关资源
        最近更新 更多