我需要从$ 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
答案 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)
我认为您的代码需要更多结构。
我的方法是将其分解为几个阶段,而不是尝试在输出数据的循环中执行所有逻辑。
我的建议:
代码(未经测试):
// 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。