Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中从数组中随机选择键和值对的更好方法_Php_Arrays - Fatal编程技术网

在PHP中从数组中随机选择键和值对的更好方法

在PHP中从数组中随机选择键和值对的更好方法,php,arrays,Php,Arrays,据我所知,array\u rand()只能从如下数组中获取radnom数组: $array = array( 'apple', 'orange', 'banana' ); $two_random_items = array_rand( $array , 2 ); // outputs i.e. orange and banana 但是我如何用键值数组抓取2个随机项呢?像这样 $array = array( '0' => 'apple', '1' => 'orange', '2' =

据我所知,
array\u rand()
只能从如下数组中获取radnom数组:

$array = array( 'apple', 'orange', 'banana' );
$two_random_items = array_rand( $array , 2 ); // outputs i.e. orange and banana
但是我如何用键值数组抓取2个随机项呢?像这样

$array = array( '0' => 'apple', '1' => 'orange', '2' => 'banana' );
$rand_keys = array_rand($array, 2);
$rand_values = array();
foreach ($rand_keys as $key) {
    $rand_values[] .= $array[$key];
}
这可能不是正确的方法,而且代码太多了

我有一个大数组这只是一个例子,我需要从父数组中随机抓取1000+或更多项,并将它们放入一个新数组中,键可以重置,这并不重要。当然,价值部分必须保持不变


有没有更好的方法来实现这一点?

只需洗牌并切片2:

shuffle($array);
$rand_values = array_slice($array, 0, 2);

首先,这一行:
$rand_values[]。=$array[$key]是错误的。
=
运算符用于连接字符串,要在数组末尾添加值,只需
$rand_values[]=$array[$key]

如果您不关心键,只需使用
array\u values
函数“转储”键即可

$array = array('a' => 'orange', 'c' => 'banana', 'b' => 'peach');
$two_random_items = array_rand(array_values($array) , 2 );

将剥离键,并返回一个带有值的数组(键将变为0、1、2…)

@KA_lin如果可能的话,你能给出一个更清晰的答案吗,Tahnkstory,直到最后才阅读。使用数据库中的rand,或者只在内存中使用?@KA_lin用于大型数组,这是一个糟糕的主意。做排序会浪费很多性能。