我正在尝试从现有的数组中创建一个新数组,其中随机数为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
)
我哪里错了?
答案 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)
"simon
array_rand()
返回随机密钥,而不是值rand(2,10)
在所有情况下都无法工作,因为数组中只有5个条目;来自PHP文档:尝试选择比数组中更多的元素将导致E_WARNING级别错误,并且将返回NULL。 如果要随机化整个阵列,请使用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))));