2016-11-24 167 views
0

我想从现有的一个新的阵列的记录2和10之间的随机数,我有这个迄今为止PHP返回随机阵列

//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 
) 

我哪里错了?第5行

+0

你可以添加你想要的期望的输出是什么样的例子吗?我对你想要做的事情有点困惑。 – kunruh

回答

1

array_rand说明解释为什么你没有得到的名字(我用粗体强调):

精选一个或数组中的随机条目更多,并返回随机条目的密钥(或密钥)

你似乎想要的值。就可以达到这样的:

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)))); 
+0

当我尝试使用$ result [1]从新数组中提取项目时,我得不到任何结果,这是否与新数组的构造方式有关? – fightstarr20

+1

的确,结果数组保持原始密钥。请参阅我的答案。 – trincot

+0

非常感谢,现在更有意义 – fightstarr20

1
  1. 语法错误 - 后"simon
  2. array_rand()回报随机密钥(一个或多个),缺失报价不值
  3. rand(2,10)不会在所有情况下工作,因为只有5阵列中的条目;来自PHP的文档:试图挑选比数组中更多的元素将导致E_WARNING级别错误,并返回NULL。

如果要随机化整个阵列,请使用shuffle()

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]);