2014-09-22 54 views
0

我有時(不是所有的時間)去除的值時獲得這Notice: Undefined offset: #錯誤注意:檢索和從陣列

我有字的陣列#:未定義偏移。我從這個數組中隨機選擇一個單詞,然後刪除它。然後,我從單詞數組中檢索的單詞被放置到另一個數組中。

$numberOfWords = $_POST['number_of_words']; 
$words = array('an', 'array', 'of', 'words', 'to', 'select', 'from'); 
$selectedWords = array(); 

for($i = 0; $i < $numberOfWords; $i++) { 
    $wordAt = rand(0, count($words) - 1); 
    $word = $words[$wordAt]; 
    array_push($selectedWords, $word); 
    unset($words[$wordAt]); 
} 

任何想法?

謝謝!

回答

3

問題是,取消設置數組元素不會神奇地重新編號數組鍵。你在陣列中出現了一個洞。你的隨機數發生器不考慮這一點,你會結束多次選擇相同的索引,導致你的未定義索引通知。您可以使用array_rand輕易挑出一個隨機數組元素:

unset數組元素
for($i = 0; $i < $numberOfWords; $i++) { 
    $word = array_rand($words); 
    array_push($selectedWords, $words[$word]); 
    unset($words[$word]); 
} 
+0

這做到了!我不知道array_rand,未設置不會重新分配索引。謝謝! – spullen 2014-09-22 00:13:20

+0

np,很高興提供幫助 – 2014-09-22 00:13:52

1

後,我們需要使用array_values重建數組索引:

$numberOfWords = $_POST['number_of_words']; 
$words = array('an', 'array', 'of', 'words', 'to', 'select', 'from'); 
$selectedWords = array(); 

for($i = 0; $i < $numberOfWords; $i++) { 
    $wordAt = rand(0, count($words) - 1); 
    $word = $words[$wordAt]; 
    array_push($selectedWords, $word); 
    unset($words[$wordAt]); 
    $words = array_values($words); 
}