我有时(并非所有时间)都会收到此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]);
}
有什么想法吗?
谢谢!
答案 0 :(得分:3)
问题在于,取消设置数组元素并不会对数组键进行神奇的重新编号。你结束了数组中的一个洞。您的随机数生成器并未将此考虑在内,您最终会多次选择相同的索引,从而导致您的未定义索引通知。您可以使用array_rand
轻松选择随机数组元素:
for($i = 0; $i < $numberOfWords; $i++) {
$word = array_rand($words);
array_push($selectedWords, $words[$word]);
unset($words[$word]);
}
答案 1 :(得分:1)
在unset
数组元素之后,我们需要使用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);
}