将文件内容放入数组并随机播放。不要输出多次。

时间:2011-07-29 21:08:20

标签: php

我有一个文本文件,每行都有一个句子列表。目前,我只是随机化线条,但显示了许多重复。我如何将这些线条变成一个数组,然后随机显示它们,但不要再显示一个句子,直到所有句子都显示出来。基本上,我需要在我再次显示引号之前循环遍历数组。

<?php 
 $list = file('list.txt');
 shuffle($list);
 echo $list[0];
?>

3 个答案:

答案 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。