2012-10-22 2 views
0

드롭 다운에 10 개의 옵션이 있고 옵션 4가 선택된 경우 1-10에서 4를 제외하고 옵션을 선택하는 코드를 작성하려면 어떻게해야합니까?PHP 또는 PHPUnit. 선택된 하나를 제외하고 드롭 다운에서 무작위 옵션을 선택하십시오.

랜덤 (1, 10)은 1에서 10까지의 임의의 숫자를 선택하지만 때로는 4에 착륙 할 수 있습니다. 어떻게 숫자 4 나 숫자를 선택하지 못하게 할 수 있습니까? 선택된?

+2

'phpunit'과 어떤 관련이 있습니까? – zerkms

+0

phpunit에서 테스트 스크립트를 작성하고 있기 때문에? – yan

+1

@ RaymondYan : 그리고 Windows 컴퓨터에 PHP 코드를 작성하고 있습니다. [tag : windows]로 내 질문에 태그를 달지 못하게합니까? –

답변

1

어떨까요? 일반적

<?php 

$filtered_key = 4; 

$range = range(1, 10); 
unset($range[$filtered_key]); 
$key = array_rand($range); 

echo $key; 
+0

네 번째 요소가 '5'이고 '4'가 아닙니다. – zerkms

+0

오류가 있습니다. – yan

2

하면 1이고 n과 m 번째 옵션을 선택하면 1, n은 다음의 알고리즘을 사용하여 m 제외간에 임의로 숫자를 생성 할 수있는 사이의 선택이있는 경우 :

<?php 
function get_rand($n,$m) 
{ 
    $r = rand(1,$n-1); //generate one of $n-1 numbers since $m is not selectable 
    if($r >= $m) //if $r is smaller than $m we're done 
    $r++;  //otherwise add one to $r 
    return($r); 
} 
?> 

귀하의 경우, n = 10 및 m = 4 인 경우, 1에서 9 사이의 숫자가 생성됩니다. 범위가 [1,3]이면 해당 숫자가 반환됩니다. 범위가 [4,9]이면 1을 더하고 [5,10] 범위의 숫자를 반환합니다. 이것은 우리가 범위 [1,3] U [5,10]에있는 임의의 정수로 동일한 확률로 돌아 간다는 것을 의미합니다.

+0

옵션 배열을 생성하고 바람직하지 않은 옵션을 제거하지 않는 이유는 무엇입니까? –

+0

이것은 일정한 시간에 실행되고 상수 메모리를 사용하므로 임의의 범위에서 작동합니다. 필터링 된 숫자가 작은 범위가있는 경우 @ SuperSkunk의 대답을 선호 할 수 있습니다. 필터링 된 숫자가 큰 범위가있는 경우이 메서드와 원하지 않는 옵션 목록을 사용하여 임의 값에 추가 할 숫자를 알아야합니다. 이것은 O (log (원치 않는 옵션 목록의 크기))입니다. – pedrosorio

관련 문제