문제

PHP (공통 내장을 사용하는 다른 언어를 사용하는 다른 언어)를 사용하면 특정 기준과 일치하지 않는 무작위 (또는 의사 랜덤) 숫자를 어떻게 얻을 수 있습니까?

IE : 나는 원한다 $x = rand(0, 99) 그러나 만약 ($x % 9) != 0.

임의의 숫자를 그런 기준으로 제한하는 깨끗한 수용 가능한 방법은 무엇입니까?

예를 들어, a while() 루프 break우리의 기준을 충족시키는 무언가가있을 때, 루프 다음에 임의의 숫자를 사용 하는가? :

while ( ($rand_key = array_rand($array_of_items)) && ($rand_key % 9 == 0) ) 
{ 
    // Do nothing?
}

또는 같은 것 :

while ( $rand_key = array_rand($array_of_items) ) 
{ 
    if ( $rand_key % 9 == 0 ) {
        break;
    }
}

아니면 이것을 달성 할 수있는 더 간결하거나 적절한 방법이 있습니까?

도움이 되었습니까?

해결책

Do-While 루프가 실제로 도움이되는 드문 경우 중 하나

$testData = array( 7, 8, 9 );

do {
  $rand = array_rand( $testData );
} while ( $testData[$rand] % 9 == 0 );

echo $testData[$rand];

다른 팁

정확한 사용 사례입니까, 아니면 예제입니까?

9의 정확한 배수를 제외하고 0에서 99까지의 숫자를 얻으려고한다면 어색한 루핑을 피하는 몇 가지 방법을 생각할 수 있습니다. 사람들은 당신이 영원히 반복 할 수 있기 때문에 임의의 숫자를 생성하는 동안 루프를 좋아하지 않습니다. (그러나 물론 당신이 극도로 운이 좋은 유형이 아니라면 일어나지 않을 것입니다. Spaghetti Westerns의 Clint Eastwood와 함께 총격전을하는 사람.)

  1. 원하는 숫자로 얻는 임의의 숫자를 다시 얻는 조회 테이블을 가질 수 있습니다.

  2. 무작위로 0-88을 생성합니다. 결과를 9로 곱하고 8으로 나누고 정수 결과를 얻습니다 (바닥, 둥근). 그런 다음 1을 추가하십시오.

이 두 가지 모두 예측 가능한 타이밍을 가지고 있습니다.

잠재적으로 여러 PRNG 호출을 위해 공간을 거래하는 대체 방법은 유효한 솔루션으로 배열을 채우고 PRNG를 사용하여 배열에 인덱스를 생성하는 것입니다. .

어떤 방법을 선택하든, 제한 코드에는 제한의 이유를 적절하고 액세스 할 수있는 방식으로 언급 할 것입니다.

이것은 '간결한'요구 사항과 일치합니다.

while( ($x = rand(0, 99)) % 9 == 0 );
echo $x;

또는

while ( $array_of_items[$rand_key = array_rand($array_of_items)] % 9 == 0 ); 
echo $array_of_items[$rand_key];     

그러나 읽기 쉽지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top