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


How to retrieve random elements from php array excluding specific elements

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

$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');

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

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

此代码从$data中移除Mouse,然后从新数组中获取随机值。随机数据的数组将像您描述的那样:

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

递归函数可能有帮助-

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

我认为你是对的,这种规模的最佳解决方案是数组过滤。说,

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

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

$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()函数并回显它

试试这个

$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";