我正在尝试学习PHP,而我写一个基本的应用程序。我想要一个过程,将旧的单词放入数组$oldWords = array();
中,以便使用array_push(oldWords, $words)
插入所有已使用的$words
。
每次执行代码时,我希望有一个进程从$wordList = array(...)
中找到一个新词。但是,我不想选择任何已经使用过或在$oldWords
中的单词。
现在我在想我该怎么做。我一直在考虑通过$wordChooser = rand (1, $totalWords);
找到一个新词,我一直在考虑使用if/else
语句,但问题是,如果array_search($word, $doneWords)
找到一个词,那么我需要更新这个词并再次检查它。
这个过程似乎非常低效,我正在考虑一个循环函数,但是,哪一个,什么是解决这个问题的好方法?
谢谢
我有点困惑,PHP在脚本执行结束时死亡。无论您如何生成这个数组,您是否也可以不同时从单词列表中生成尚未使用的单词?(array_diff
从所有单词到常用单词)。
或者,如果有其他原因我错过了,为什么你不能使用循环并快速找到$wordList
中$oldWord
中O(n)
中没有的第一个单词呢?
function generate_new_word() {
foreach ($wordList as $word) {
if (in_array($word, $oldWords)) {
return $word; //Word hasn't been used
}
}
return null; //All words have been used
}
或者,只是做一个数组差值(虽然效率较低,因为最好的情况是它必须遍历整个数组,而对于上面的方法,它只需要遍历第一个单词)
EDIT: For random
$newWordArray = array_diff($allWords, $oldWords); //List of all words in allWords that are not in oldWords
$randomNewWord = array_rand($newWordArray, 1);//Will get a new word, if there are any
或者除非您对创建自己的数据类型感兴趣,否则最好的情况可能是O(log(n))