如何从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];