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