注意:未定义的偏移量:从数组中检索和删除值时的#

时间:2014-09-22 00:04:25

标签: php

我有时(并非所有时间)都会收到此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]);
}

有什么想法吗?

谢谢!

2 个答案:

答案 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);
}