PHP while循环给我一个随机数的结果

时间:2016-06-29 05:11:47

标签: php while-loop fgets

下面这段代码应该从文本文件中挑选5个随机成员并一个接一个地显示它们:

function display() {
 $open_file = fopen("members.txt", 'r');
 $members = explode("*", fgets($open_file));
 $members_num = count($members);
 $i=1;
 shuffle($members);
 while($i <= 5) {
   $details = explode("|", $members[$i++]);
   if(!empty($details[0])) {
   echo <<<EOF
    $details[0] $details[1] $details[2] 
EOF;
}
 }
  fclose($open_file);
}

ob_start();
display();
$display = ob_get_contents();
ob_end_clean();

$content=<<<EOF
 some text here $display more text
 <br>
 etc.
EOF;

echo $content;

这是members.txt的内容:

*James Johnson|USA|Male|1*Mary Reis|Germany|Female|2*Lin Xi|China|Male|3*Jessica Andrew|UK|Female|4*

问题在于它不会一直显示5,有时它只显示4次而其他时间只有6次。为什么会这样?如何修复它以便它只显示5个总是?

谢谢。

1 个答案:

答案 0 :(得分:1)

由于您在行尾有*,因此$members的其中一个元素将为空字符串。当您到达该元素时,explode('|', $members[$i++])将返回数组[''],因此if(!empty($details[0]))将跳过它。但是,由于您增加$i,这会导致您只显示4个成员。

我看不出你的代码可以显示6个成员的任何方式。

修复只是在元素之间使用*,而不是在它们之后。或者从$members中删除空字符串。

$members = array_filter($members);