2017-01-06 7 views
1

シャッフルを取得しようとしていて、for eachループ内に19項目しかありません。 shuffle()if (++$i == 19) {break;}を使用しましたが、問題は1回12アイテム、1回13回、別の時間です。14.何が間違っていましたか?ここでシャッフルして、PHP foreachループ内の特定の項目のみを表示します。

は、チェックするためのコードです:

<?php 
    $i = 0; 
    shuffle($children); 
    foreach ($children as $child) { 
     if ($child['name_total'] > 0) { 
      ?> 
      <li> 
      <?php echo ($child['filter_id'] == 2 ? "<span class='Verified'><i class='fa fa-check-circle'></i></span>" : ""); ?> 
       <div class="CatImg"><a title="<?php echo $child['name']; ?>" href="<?php echo $child['href']; ?>"><img alt="<?php echo $child['name']; ?>" src="<?php echo $child['thumb']; ?>"/></a></div> 
       <a title="<?php echo $child['name']; ?>" href="<?php echo $child['href']; ?>"><?php echo $child['name']; ?><span class="Total"><?php echo $child['name_total']; ?></span></a> 
      </li> 
     <?php 
     } 
     if (++$i == 19) { 
      break; 
     } 
    } 
?> 
+1

すべての値は '$ child ['name_total']> 0'条件を満たしていますか?私は '++ $ i == 19'チェックが最初の' if'の内側にあるはずだと思います。 –

+0

@SougataBoseええ、dbはこの状態で30以上のアイテムを持っています。 – Pedram

+0

'$ i'の初期値は何ですか? – topher

答えて

2

結果が印刷されている場合のみ、$ iを大きくします。新しいforeachループを開始する前に値を確認してください。

<?php 
$i = 0; 
shuffle($children); 
foreach ($children as $child) { 
    if ($child['name_total'] > 0) { 
     ?> 
     <li> 
     <?php echo ($child['filter_id'] == 2 ? "<span class='Verified'><i class='fa fa-check-circle'></i></span>" : ""); ?> 
      <div class="CatImg"><a title="<?php echo $child['name']; ?>" href="<?php echo $child['href']; ?>"><img alt="<?php echo $child['name']; ?>" src="<?php echo $child['thumb']; ?>"/></a></div> 
      <a title="<?php echo $child['name']; ?>" href="<?php echo $child['href']; ?>"><?php echo $child['name']; ?><span class="Total"><?php echo $child['name_total']; ?></span></a> 
     </li> 
    <?php 
    $i++; 
    } 
    if ($i == 19) { 
     break; 
    } 
} 
?> 
-1

次のことを試してみてください。

<?php 
$counter = 0; 

shuffle($children); 

foreach ($children as $child) 
{ 

    if ($counter < 18) 
    { 
     break; 
    } 

    if($child['name_total'] > 0) 
    { 
    $counter++; 
?> 
    <li> 
    <?php echo ($child['filter_id'] == 2 ? "<span class='Verified'><i class='fa fa-check-circle'></i></span>" : "");?> 
    <div class="CatImg"><a title="<?php echo $child['name']; ?>" href="<?php echo $child['href']; ?>"><img alt="<?php echo $child['name']; ?>" src="<?php echo $child['thumb']; ?>"/></a></div> 
    <a title="<?php echo $child['name']; ?>" href="<?php echo $child['href']; ?>"><?php echo $child['name']; ?><span class="Total"><?php echo $child['name_total']; ?></span></a> 
    </li> 
<?php 
    } 
} 
?> 
+0

これは明らかにエラーです。私のdownvoteではない。 – RST

+0

ループはすぐに終了します。 – GordonM

1

あなたのコードの簡易版

foreach ($children as $child) { 

    if ($child['name_total'] > 0) { 
     // display stuff 
    } 

    if (++$i == 19) { 
     break; 
    } 
} 

ので$iは何も表示されない場合でも、毎回インクリメントされます。 $child['name_total']が0の場合、何も表示されませんが、$iはまだインクリメントされています。

あなたは19の項目が表示されたい場合は、何かが実際に表示されたときにのみ$iをインクリメントする必要があります。

foreach ($children as $child) { 

    if ($child['name_total'] > 0) { 
     // display stuff 

     if (++$i == 19) { 
      break; 
     } 
    } 
} 
2

私はあなたが、配列をシャッフルしたいと思います、

この機能を使用して、

function shuffle_assoc(&$array) { 
    $keys = array_keys($array); 

    shuffle($keys); 

    foreach ($keys as $key) { 
     $new[$key] = $array[$key]; 
    } 

    $array = $new; 

    return true; 
} 
$i = 0; 
shuffle_assoc($children); 

foreach ($children as $child) { 
    if ($child['name_total'] > 0) { 
     ?> 
     <li> 
     <?php echo ($child['filter_id'] == 2 ? "<span class='Verified'><i class='fa fa-check-circle'></i></span>" : ""); ?> 
      <div class="CatImg"><a title="<?php echo $child['name']; ?>" href="<?php echo $child['href']; ?>"><img alt="<?php echo $child['name']; ?>" src="<?php echo $child['thumb']; ?>"/></a></div> 
      <a title="<?php echo $child['name']; ?>" href="<?php echo $child['href']; ?>"><?php echo $child['name']; ?><span class="Total"><?php echo $child['name_total']; ?></span></a> 
     </li> 
    <?php 
    } 
    if (++$i == 19) { 
     break; 
    } 
} 
?> 

私はこれがあなたの問題解決に役立つことを願っています。

関連する問題