下面这段代码应该从文本文件中挑选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个总是?
谢谢。
答案 0 :(得分:1)
由于您在行尾有*
,因此$members
的其中一个元素将为空字符串。当您到达该元素时,explode('|', $members[$i++])
将返回数组['']
,因此if(!empty($details[0]))
将跳过它。但是,由于您增加$i
,这会导致您只显示4个成员。
我看不出你的代码可以显示6个成员的任何方式。
修复只是在元素之间使用*
,而不是在它们之后。或者从$members
中删除空字符串。
$members = array_filter($members);