我需要一些帮助。我有下面给出的数组,我想从中返回随机元素。
$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');
答案 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";