无法判刑是否有效?

时间:2018-02-07 21:12:08

标签: php arrays if-statement foreach

我正在使用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
                    }
                 }

1 个答案:

答案 0 :(得分:1)

number_format()会返回该数字的格式化字符串。因此,当您使用===字符串与实际数字进行比较时,它始终为false,因为字符串类型永远不能严格等同于数字类型。此外,它只会在第一次工作时$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)