我有一个文本文件,每行都有一个句子列表。目前,我只是随机化线条,但显示了许多重复。我如何将这些线条变成一个数组,然后随机显示它们,但不要再显示一个句子,直到所有句子都显示出来。基本上,我需要在我再次显示引号之前循环遍历数组。
<?php
$list = file('list.txt');
shuffle($list);
echo $list[0];
?>
答案 0 :(得分:1)
Shuffle不会在您的数组中创建重复项,因此此代码可以正常工作:
<?php
$list = array(1,2,3,4,5,6);
shuffle($list);
print_r($list);
?>
Array
(
[0] => 2
[1] => 3
[2] => 6
[3] => 4
[4] => 1
[5] => 5
)
这意味着您的文件中有重复的行。如果要获取具有唯一值的数组,请使用:$unique = array_unique($list);
<?php
$list = array(1,1,2,2,3,3);
$unique = array_unique($list);
shuffle($unique);
print_r($unique);
?>
Array
(
[0] => 3
[1] => 2
[2] => 1
)
答案 1 :(得分:0)
执行此操作的一种简单方法是,不要每次都调整数组,只需选择一个随机索引。然后,将此索引存储在列表中。通过这种方式,如果您已经使用了此索引,则可以检查下一个函数调用(如果将它们存储在已排序的列表中,则可以非常快速地检查,例如通过使用二进制搜索)。如果索引数等于文件中的行数,则可以安全地丢弃列表并启动一个新列表,因为所有索引都已在该时间点使用。
答案 2 :(得分:0)
您可以先删除重复的行并将结果放入数组x。
然后从数组x中选择一个随机元素,打印它,并将其移动到第二个(最初为空)数组y。 重复直到数组x为空。然后你可以重新开始移动元素 从数组y到数组x。