2011-07-29 52 views
1

我有一個文本文件,每行有一個句子列表。目前,我只是隨機化線條,但有許多重複出現。如何將這些行放入數組中,然後隨機顯示它們,但在顯示所有句子之前不要再顯示一個句子。基本上,我需要在整個數組中循環一次,然後再次顯示引號。將文件內容獲取到數組中並對其進行洗牌。不要輸出一次以上。

​​
+0

展示給誰看?在什麼情況下?爲單個用戶或所有用戶循環播放? – Problematic

+0

這只是一個單獨的文本文件,每行都有一個句子。它應該回應那句話。 –

+0

並且您希望每個請求都顯示一行,直到顯示所有句子,然後將列表隨機化並重新開始?我仍然努力瞭解一下你在找什麼。 – Problematic

回答

0

一個簡單的方法來做到這一點,而不是每次洗牌數組,只是選擇一個隨機索引。然後,將該索引存儲在列表中。這樣,如果你已經使用過這個索引(如果你將它們存儲在一個有序列表中,你可以非常快地檢查它,例如通過使用二進制搜索),你可以檢查下一個函數調用。如果索引數量等於文件中的行數,則可安全地放棄您的列表並開始新列表,因爲在該時間點已使用所有索引。

0

您可以先刪除重複行並將結果放入數組x中。

然後從數組x中選取一個隨機元素,將其打印出來,並將其移動到第二個(最初是空的)數組y中。 重複,直到數組x爲空。然後,您可以再次從數組y到數組x再次移動元素 。

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 
) 
相關問題