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

PHP while loop is giving me a random number of results

下面的这段代码应该从一个文本文件中随机挑选 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 个?

谢谢。

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

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

解决方法是仅在元素之间使用 *,而不是在它们之后。或者从 $members.

中删除空字符串
$members = array_filter($members);