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

如何从php数组中检索不包括特定元素的随机元素,php,arrays,random,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', 'Keyboa

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

$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');
您可以使用从
$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
中删除
鼠标
,然后从新数组中获取随机值。随机数据的数组将如您所述:

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

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

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

首先取消设置“鼠标”,然后使用
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];