使用PHP随机数元素的随机数div

时间:2010-12-29 10:34:16

标签: php random for-loop

我需要从$ totalItems的随机数生成每个div五个项目的随机数div(以及最后一个div中的剩余项目),并且不是所有项目都满足$ OKItems ...希望代码比我更好解释

我的问题是这个脚本会生成没有内容的空div。

<?php

  $OKItems = 0;
  $totalItems = rand(2,30);

  for ($i = 0; $i < $totalItems; $i++) { 
    echo ($OKItems == 0 || $OKItems % 5 == 0) ? 'div open<br />' : '';

    $testValue = rand(0, 1);
    if ($testValue != 0) {
      echo '1'; 
      $OKItems++;
    }

    echo ($OKItems % 5 == 0 || $i+1 == $totalItems) ? '<br />div close<br />' : '';
  } 

?>

这就是我可能得到的:

div open

div close
div open
11111
div close
div open

div close
div open

div close
div open
11
div close

这就是我在这种情况下想要的:

div open
11111
div close
div open
11
div close

3 个答案:

答案 0 :(得分:1)

<?php

const N = 5;
$totalItems = rand(2,30);

$items = array() ;
for ($i = 0; $i < $totalItems; $i++) { 
    $testValue = rand(0, 1);
    if ($testValue != 0) {
      $items[] = 1 ;
    }

    if( N == sizeof($items) || (($i == $totalItems - 1) && 0 < sizeof($items))  ) {
        echo "<div>" . join(",", $items) . "</div>";
        $items = array() ;
    }
} 

答案 1 :(得分:1)

我认为您的代码需要更多结构。

我的方法是将其分解为几个阶段,而不是尝试在输出数据的循环中执行所有逻辑。

我的建议:

  1. 决定要测试的项目数
  2. 测试每个项目,仅复制传递到新阵列的项目
  3. 将此新数组分区为5个
  4. 将每个分区输出为div
  5. 代码(未经测试):

    // Decide how many items to test
    $totalItems = rand(2,30);
    
    // Test these items and add them to an accepted array
    $items = Array();
    for ($i = 0; $i < $totalItems; $i++) { 
      $testValue = rand(0, 1);
      if ($testValue != 0) { $items[] = "1" }
    }
    
    //Partition them into sections
    $partitions = array_chunk($items,5);
    
    //Output as divs
    foreach($partitions as $partition):
      echo 'div open <br />';
        foreach($partition as $item):
          echo $item . "<br />";
        endforeach;
      echo 'div close <br />';
    endforeach;
    

    将代码拆分为逻辑步骤时,维护和调试变得更加容易。

答案 2 :(得分:0)

<?php
$OKItems = 0;
$totalItems = rand(2,30);

for ($i = 0; $i < $totalItems; $i++) { 
  echo ($OKItems == 0 || $OKItems % 5 == 0) ? 'div open<br>' : '';

  $testValue = rand(0, 1);
  if ($testValue != 0) {
    echo '1'; 
    $OKItems++;
  }

  if($OKItems % 5 == 0 || $i+1 == $totalItems) {
      echo '<br>div close<br>';
      $OKItems = 0;
  }
} 

?>

那应该有效;)

我更改了一个if函数的检查行,该函数也重置了$ OKItems。你有(我认为)的问题是你得到一个0作为随机值,并且会在5上保持$ OKitems。