2016-02-05 50 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設置分頁的結果集大小。也許你甚至可以用一些謂詞或限制條款或其他東西限制響應結果的數量,即只要求你真正需要的東西。