【问题标题】:Cant get if sentence to work?不能让句子起作用吗?
【发布时间】:2018-02-07 21:12:07
【问题描述】:

我正在使用一个 foreach 循环来遍历一个数组。有了它,我有 $q ,它在每次循环运行时以 1 的值进行迭代。而当值达到总数的1/3时,就是回显出新的div,以便做几列。 但我似乎找不到错误。

            $i = 0;
            $count = count($segments->getItems());
            $countdiv = $count / 3;
            $countdiv = number_format((float)$countdiv,0,',','');
            $q = 0;
                foreach($segments->getItems() as $segment) 
                {
                    $q++;
                    $allusers = 0;
                    if($segment->getName() === 'All Users') {
                        $allusers = "checked";
                    }

                    ?>
                    <label class="custom-control custom-checkbox">
                        <input type="checkbox" name="<?php echo $segment->getName();?>" value="segments[]" class="custom-control-input" <?php echo $allusers?>>
                        <span class="custom-control-indicator"></span>
                        <span class="custom-control-description"><?php echo $segment->getName();?></span>
                      </label>
                    <?php
                    if($q === $countdiv) 
                    {
                        ?>
                            </div>
                        </div>
                        <div class="col-md-6">
                            <div class="custom-controls-stacked">
                            <?php
                    }
                 }

【问题讨论】:

  • 我会尝试if($q % (round($count) / 3) === 0),这样您就可以完全删除$countdiv
  • $q === $countdiv 永远不会为真,因为您尝试严格将字符串与整数进行比较。
  • @ChrisForrence 如果他尝试在计数达到 1/3 时执行某项操作,if($q % $count === 0) 将如何工作?假设计数是9,迭代是3,结果将是3,这不会给他他想要的结果。
  • @ChrisForrence 是的,我现在看到了编辑。在您发表评论并单击提交后,我稍微写了评论,但我的办公室互联网决定无法运行,当我的浏览器重新启动时,显然它提交了。这是我什至看到它的唯一原因哈哈。

标签: php arrays if-statement foreach


【解决方案1】:

number_format() 返回数字的格式化字符串。因此,当您使用 === 将该 string 与实际的 number 进行比较时,它始终为 false,因为 string 类型永远不会严格等同于 number 类型。此外,它只能在第一次使用,因为$q 总是在增加。

正如@Chris Forrence 建议的那样,您可以这样做:

if(($q % round($count / 3)) === 0)

让我们深入探讨一下。首先我们将$count 除以 3,因为我们想要三列。我们不能对一个项目的一小部分进行除法,所以让我们将round 得到一个整数。然后我们用它来取 $q 的模数 (%)。这只是说除法x / y 但不是结果,而是给我余数。因此,每次$q$count / 3 的倍数时,这将返回 0。因此,如果我们测试整个计算以查看它是否等于 0,那么我们将知道我们何时达到了列边界之一。

如果您要循环大量对象并且性能成为问题,请将您的 $countdiv 声明更改为:

$countdiv = round($count / 3)

然后上面的if语句可以缩减为:

if(($q % $countdiv) === 0)

【讨论】:

    猜你喜欢
    • 2021-03-01
    • 2015-01-27
    • 2014-01-26
    • 2017-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多