虽然在 php 中循环未完成循环


While loop in php not finishing loop

我正在处理这段代码,并试图让它只从存储库中提取 4 个条目,并且它一直在拉取我的所有条目。

<?php
     while ( $i < 4) {
            foreach ($churchEvents->getResults() as $churchEvent){
                ?>  
                    <tbody>
                        <tr>
                            <td> <?php echo $churchEvent->getStructuredText('church-events.event-title')->asText(); ?>
                            </td>
                            <td class="cuntd" style="vertical-align: middle;">
                                <?php echo $churchEvent->getDate('church-events.event-start-date')->asDateTime()->format('l, F j, Y'); ?>
                            </td>
                        </tr>
                    </tbody> 
                <?php $i++; } } ?>

你有两个循环,但没有理由有两个循环。内部的(foreach)已经遍历了所有的$churchEvents,所以外部的(while)不会让它做得更少。

删除外while循环和$i++;,并使内循环仅循环前四个元素。

为此,您可以使用 foreach 语句中的=>语法来获取 $i 的值,然后添加一个 if 退出循环:

<tbody>  
<?php
foreach ($churchEvents->getResults() as $i => $churchEvent){
    if ($i >= 4) break;
?>  
    <tr>
        <td> <?= $churchEvent->getStructuredText('church-events.event-title')->asText() ?>
        </td>
        <td class="cuntd" style="vertical-align: middle;">
            <?= $churchEvent->getDate('church-events.event-start-date')->asDateTime()->format('l, F j, Y') ?>
        </td>
    </tr>
<?php
}
?>
</tbody>

请注意,tbody不应多次生成,因此应将其排除在循环之外。

因为 while 在外面。

while ( $i < 4) {
        foreach ($churchEvents->getResults() as $churchEvent){

在开始时尝试如果休息相结合。

//you don't need while here anymore
foreach ($churchEvents->getResults() as $churchEvent){
if ($i >= 4) {
    break;
}

方法名称足够独特,可以猜测您正在使用的库/api:(http://prismicio.github.io/php-kit/namespaces/Prismic.html),对吧?

->getResults()方法返回一个数组。因此,有几种选择;以下是其中的一些:

使用 SPL 限制迭代器:

<?php
// only fetching the first four entires
$iter = new LimitIterator( new ArrayIterator($churchEvents->getResults()), 0, 4);
foreach ($iter as $churchEvent) { ?>  
    <tbody>
        <tr>
            <td> <?php echo $churchEvent->getStructuredText('church-events.event-title')->asText(); ?></td>
            <td class="cuntd" style="vertical-align: middle;"><?php echo $churchEvent->getDate('church-events.event-start-date')->asDateTime()->format('l, F j, Y'); ?></td>
        </tr>
    </tbody> 
<?php 
}

使用 array_slice() 获取前四个元素,然后迭代这四个元素:

<?php
// copying the first four element of the array
$arr = array_slice($churchEvents->getResults(), 0, 4);
foreach ($arr as $churchEvent) { ?>  
    <tbody>
        <tr>
            <td> <?php echo $churchEvent->getStructuredText('church-events.event-title')->asText(); ?></td>
            <td class="cuntd" style="vertical-align: middle;"><?php echo $churchEvent->getDate('church-events.event-start-date')->asDateTime()->format('l, F j, Y'); ?></td>
        </tr>
    </tbody> 
<?php 
}

(首选选项:)仅要求四个项目/碎屑:
我不熟悉 api,但至少有方法pageSize(integer $pageSize) : 'Prismic'SearchForm设置分页的结果集大小。也许你甚至可以用一些谓词或限制子句或其他东西来限制响应中的结果数量,即只请求你真正需要的东西。