2015-09-05 101 views
0

我想在學習PHP的同時編寫一個基本的應用程序。我想要一個將舊字放入數組中的過程$oldWords = array();因此已使用的所有$words都可以使用array_push(oldWords, $words)插入。PHP的問題。循環或If語句?

每次執行代碼時,我都需要一個從$wordList = array(...)中找到新單詞的進程。但是,我不想選擇已使用或在$oldWords中的任何字詞。

現在我正在考慮如何去做這件事。我一直在考慮通過$wordChooser = rand (1, $totalWords);找到一個新單詞我一直在考慮使用if/else語句,但問題是如果array_search($word, $doneWords)找到一個單詞,那麼我需要更新單詞並再次檢查它。

這個過程看起來非常低效,我正在考慮一個循環函數,但是,哪一個,以及什麼是解決該問題的好方法?

感謝

+0

循環訪問數組並使用if語句如果調查單詞存在,則創建一個新單詞。 – aldrin27

+0

哪看看聲明?你能分享一個快速的例子嗎? –

+0

oh so,while($ found == 0)if(word matches?)$ found = 1 else {reset word?} –

回答

0

我有點困惑,PHP死在腳本執行結束。然而,你正在生成這個數組,你能不能同時生成哪些單詞沒有被用在單詞列表中? (從所有單詞到所用單詞的array_diff)。

否則,如果有另一個原因,我錯過了,爲什麼你不能只使用一個循環,並迅速找到了第一個詞$wordList,這不是在$oldWordO(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 
} 

或者,只是做一個數組差(低效率雖然,因爲最好的情況是它要經過整個陣列,而在它上面只有去的第一個字)

編輯:對於隨機

$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))

+0

我希望自己會被嚇呆,選詞必須保持隨機。所有的單詞都在$ allWords = array(word1,word2 ...)中; –

+0

檢查我的編輯,是你想要的嗎? –

+0

是的,就是這樣!現在我想我的擔心是,當沒有新詞時。那個函數輸出什麼? –