2016-02-05 51 views
-2

我正在处理此代码,并试图让它只从存储库拉4条目,它不断拉我所有的条目。虽然在php循环未完成循环

<?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++; } } ?> 
+0

你有没有初始化$ i为0? – SeanKelleyx

+1

“试图让它只从存储库中提取4个条目” - 您是否期望在四次迭代后foreach-loop被“中止”? – VolkerK

+0

@VolkerK试图说:'$ churchEvents-> getResults()'可能根据名字“拉”所有条目? – arkascha

回答

0

你有两个循环,但没有理由有两个循环。内部的一个(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不应该生成不止一次,所以它应该避开循环。

+0

工作正常!太棒了,谢谢你!! – jamesp

+0

不客气。 – trincot

0

因为while在foreach之外。

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

在的foreach开始尝试如果结合了突破

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

方法名是不够鲜明,使猜测什么库/ API,你使用:(http://prismicio.github.io/php-kit/namespaces/Prismic.html),对不对?

->getResults() method返回一个数组。所以,有几种选择;这里是其中一些:

使用一个SPL LimitIterator

<?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 
} 

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