5

私は問題に直面しています。foreachPHPでループを構築しました:

 <?php $show = false; ?>
 <?php foreach ($this->items as $item) : ?>

しかし、最初の 20 項目をエコーし​​、次の 16 項目を続けたいと思います。

20 個のアイテムの後にブレークすることはできましたが、次の 16 個のアイテム ( nr 21 から開始) を取得できません。

これは私がこれまでに持っているものです:

<?php $show = false; ?>
<?php $i = $item->id = 1; ?>
<?php foreach ($this->items as $item) : ?>
<?php if(++$i > 20) break; ?>

私がそれに設定$iした'21'場合でも、アイテム1などをエコーし​​ます。

解決策 ## @dhavald に感謝

<?php $show = false; ?>                                   
<?php foreach (array_slice ($this->items, 0, 20) as $item) : ?>

foreach に を配置することarray_sliceで、表示するアイテムを制御できます。次の div では、アイテム 21 から 36 を表示したいのですが、変更する必要があったのは、0 と 20 を , 20, 36 に変更することだけでした。

探しているものを明確にするために、いくつかの項目をエコーし​​たい 3 つの div があります。ユーザーが最初の div を折りたたむと、最初の 20 項目が表示され、ユーザーが div2 をクリックすると、次の 16 項目が表示されます。

このコードを修正してそれを実現するにはどうすればよいですか?

言及するのを忘れていたように、あなたがもたらしたソリューションはプロセスを本当に理解するのに役立ちましたが、Joomla 3.1 のコンポーネントジェネレーターを使用したため、最初の 20 と 2 番目の 16 を呼び出すのが少し複雑になるコード行が 1 つあります。アイテム。

foreach ループの直後に、次のコード行があります。

if($item->state == 1 || ($item->state == 0 && JFactory::getUser()>authorise('core.edit.own',' com_ncitycatemus.vraagantwoordtoevoegen.'.$item->id))):

$show = true;

ループよりもどうすれば管理できますか?それとも別の方法を提案しますか?

前もって感謝します!ループを理解するのに本当に役立ちました!!

4

5 に答える 5

2

array_sliceを使用して $this->items 配列の一部を取得し、それを 3 つの異なる変数に割り当てて、それらを個別にループすることができます。

$itemsDiv1 = array_slice($this->items, 0, 20);  // gives first 20 items
$itemsDiv2 = array_slice($this->items, 20, 16); // gives next 16 items

等々..

于 2013-05-20T17:10:23.803 に答える
2

使わないbreak;使うcontinue;

于 2013-05-20T16:58:20.963 に答える
1
<?php $i = 0; ?> 

<!-- first group -->
<div>

<?php foreach ($this->items as $item) : ?> 
<?php
/**
 * Check if count divided by 20 has no remainder
 */
if ( (++$i % 20) == 0 ): ?>

</div>
<!-- start new group -->
<div>

<?php endif ?>
<?php endforeach ?>

<!-- end last group -->
</div>
于 2013-05-20T17:13:44.217 に答える