PHP返回随机数组

时间:2016-11-24 21:22:21

标签: php arrays

我正在尝试从现有的数组中创建一个新数组,其中随机数为2到10之间的记录,到目前为止我已经这样了

//Select a random number
$random_number = (rand(2,10));

// Setup an array of names
$names = array("john", "joe", "simon", "peter", "paul");

// Create new array
$random_field_names = array_rand($names, $random_number);

print_r($random_field_names);

这给了我一个看起来像这个

的数组
Array
(
    [0] => 0
    [1] => 10
    [2] => 11
)

我哪里错了?

3 个答案:

答案 0 :(得分:2)

使用键获取所需的值:

//Select a random number
$random_number = (rand(2,10));

// Setup an array of names
$names = array("john", "joe", "simon", "peter", "paul");

// Create new array
$random_field_names = array_rand($names, $random_number);

print_r($names[$random_field_names]);

答案 1 :(得分:1)

    第5行的
  1. 语法错误 - "simon
  2. 之后缺少引用
  3. array_rand()返回随机密钥,而不是值
  4. rand(2,10)在所有情况下都无法工作,因为数组中只有5个条目;来自PHP文档:尝试选择比数组中更多的元素将导致E_WARNING级别错误,并且将返回NULL。
  5. 如果要随机化整个阵列,请使用shuffle()

答案 2 :(得分:1)

dict.setdefault的描述解释了为什么你没有得到这些名字(我用粗体强调):

  

从数组中挑选一个或多个随机条目,并返回随机条目的(或键)。

你似乎想要这些价值观。你可以这样做:

 array_intersect_key($names,  array_flip(array_rand($names, $random_number)));

还要确保随机数不大于数组大小:

$random_number = rand(2,5);
$names = array("john", "joe", "simon", "peter", "paul");
$result = array_intersect_key($names,  array_flip(array_rand($names, $random_number)));
print_r ($result);  

请注意,结果会保留原始密钥。如果要重新编号键以获取以索引0开头的索引数组,则将array_values应用于结果:

$result = array_values(array_intersect_key($names,  array_flip(array_rand($names, $random_number))));