如何从php数组中检索随机元素,不包括特定元素

时间:2015-10-13 08:18:39

标签: php arrays random

我需要一些帮助。我有下面给出的数组,我想从中返回随机元素。

$data = array('Computer', 'Laptop', 'Mouse', 'Keyboard');
$rand = rand(0,count($data)-1);
echo $data[$rand];

上面的代码按预期工作。但是,我不能从返回的列表中排除特定元素,如下所示:

$exclude = "Mouse";
$data = array('Computer', 'Laptop', 'Mouse', 'Keyboard');
$rand = rand(0,count($data)-1);
echo $data[$rand];

预期结果是在这种情况下$ exclude "Mouse"中指定的元素不会作为随机元素之一返回。

可能首先从数组中删除鼠标元素,如下所示,然后将返回一个随机元素:

$data = array('Computer', 'Laptop', 'Keyboard');

5 个答案:

答案 0 :(得分:3)

您可以使用array_diff$exclude移除$data中的值。

$exclude = array('Mouse');
$data = array('Computer', 'Laptop', 'Mouse', 'Keyboard');
$excluded_data = array_values(array_diff($data, $exclude));
$rand = rand(0,count($excluded_data)-1);
echo $excluded_data[$rand];

此代码从Mouse中删除$data,然后从新数组中获取随机值。随机数据的数组将如您所述:

$data = array('Computer', 'Laptop', 'Keyboard');

答案 1 :(得分:0)

递归函数可能会有所帮助 -

function select_rand($exclude, $array) {
   $rand = rand(0,count($array)-1);
   if($array[$rand] == $exclude) {
       select_rand($exclude, $array);
   }
   else
   {
       echo $array[$rand] ;
   }
}

$exclude = "Mouse";
$data = array('Computer', 'Laptop', 'Mouse', 'Keyboard');
select_rand($exclude, $data);

$exclude = "Mouse";
$data = array('Computer', 'Laptop', 'Mouse', 'Keyboard');
$temp = array_diff($data, array($exclude));
echo $temp[rand(0, sizeOf($temp))];

答案 2 :(得分:0)

我认为你是对的,这种尺度的最佳解决方案是阵列过滤。说,

$exclude = "Mouse";

function noexc($var) {
    global $exclude;
    return ($exclude != $var);
}

$data = array('Computer', 'Laptop', 'Mouse', 'Keyboard');
$fdata = array_filter($data, "noexc");
$rand = rand(0,count($fdata)-1);
echo $fdata[$rand];

答案 3 :(得分:0)

您可以准备一个新数组并将字符串存储而不排除字符串:

$exclude = "Mouse";
$data = array('Computer', 'Laptop', 'Mouse', 'Keyboard');
$exclude_arr=array();

foreach ($data as $single)
{
 if($single !== $exclude)
     $exclude_arr[]=$single;
}
//Here you have the array exclude_arr without the exclude string
$rand = rand(0,count($exclude_arr)-1);
echo $exclude_arr[$rand];

像往常一样执行rand()函数并回显它

答案 4 :(得分:-1)

试试这个

$exclude = "Mouse";
$data = array('Computer', 'Laptop', 'Mouse', 'Keyboard');
$dummy_data=$data ;
$key=(array_keys($dummy_data,$exclude));
$key=$key[0];
unset($dummy_data[$key]);
$rand = rand(0,count($dummy_data)-1);
//print_r($dummy_data);
if(isset($dummy_data[$rand]))
echo $dummy_data[$rand];
else
echo"Record Missing";