2015-10-13 101 views
3

請給我一些幫助。我有下面給出的數組,我想從它返回隨機元素。如何檢索不包含特定元素的php數組中的隨機元素

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

上述代碼正常工作。不過,我wan't能夠排除返回列表的具體內容下面給出:

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

預期的結果是該元素指定在$在這種情況下排除"Mouse"將不予退還作爲一個隨機元素。

也許鼠標元件將首先從陣列中移除所看到下面然後隨機元素將被返回:

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

第一個未設置的「鼠標」並在使用'rand()'添加鼠標或不使用密鑰後。 –

回答

2

你可以使用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]; 

該代碼去除$dataMouse然後獲取從新的數組隨機值。陣列的隨機數據會像你描述:

$data = array('Computer', 'Laptop', 'Keyboard'); 
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))]; 
0

試試這個

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

我想你是對的,並且是這種sc的最佳解決方案愛麗斯是陣列過濾。說,

$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]; 
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()函數照常和回聲它