2011-11-29 3 views
0

임의의 순서로 출력되는 3 가지 오퍼링의 배열을 만들고 싶습니다. 나는 다음과 같은 코드를 가지고 있으며 무작위 인 것으로 보이지 않는 3 개의 무작위 제안을 출력한다. 생성 된 배열의 첫 번째 값은 항상 내 오퍼 테이블의 첫 번째 2 레코드에서 나온 것 같습니다. 오퍼 테이블에는 5 개의 레코드 만 있습니다 (이 경우 영향을 받는지는 알 수 없습니다).PHP에서 무작위 배열을 만들고 코드에서 진정한 무작위 응답을 출력하지 않는 것 같습니다

$arrayOfferCount = $offerCount-1; 
$displayThisManyOffers = 3; 

$range = range(0, $arrayOfferCount); 
$vals = array_rand($range, $displayThisManyOffers);` 

어떤 도움이나 조언을 주시면 감사하겠습니다.

+0

http://www.etoan.com/random-number-generation/dilbert2001182781025.gif이 – Julien

+0

인간은 좋은 기능을 사용하여 임의의 인덱스를 선택 어디에도 존재하지 않습니다. array_rand는 난수를 생성하지만 무작위로 5 가지만 얻었 기 때문에 패턴이없는 것처럼 보입니다. –

답변

1

나는 mt_rand()이 훨씬 더 뛰어나다는 것을 안다.

그러나, 귀하의 경우에 당신은 당신

SELECT * FROM ads ORDER BY RAND() LIMIT 0, 3 
+0

고마워. . 인생을 훨씬 쉽게 만들어주고 약 20 줄의 코드를 제거했습니다. 다시 Thansk! –

+3

ORDER BY RAND()는 테이블이 커지거나 쿼리가 더 복잡 해지면 실제로 느려질 가능성이 있음을 알고 있어야합니다. 이 상황에서는 5 가지 레코드 만 있으므로 훌륭한 선택입니다. – mfonda

+0

이 솔루션에 대한 정보를 주셔서 감사합니다 potentialy 느린 ... 어떤 종류의 테이블 크기에 대해 걱정해야합니까 - 제 생각에이 테이블에는 500 개 이상의 레코드가 없을 것입니다 - 이것이 문제를 나타낼 것이라고 생각하십니까? –

0

표시 할 임의 선택이지만 배열에 나타나는 것과 같은 순서로 표시합니다. 만약 당신이 충분한 시간 (~ 20)을한다면, 3 번을 한 번 표시해야합니다. 5 번 중 마지막 3 번을 선택하는 확률은 5 * 4에서 1이 될 것이기 때문에 매 20 일마다 세 번째 옵션이 나타납니다).

+0

생각해 줘서 고마워.이 코드를 어떻게 다시 작성하여 더 무작위로 만들 수 있나 ... 아니면 나중에 테이블에 나타나는 제안을 ... 내가 지금 보이는 것의 반대 ... –

2

여기에 잘 작동에 대한 데이터베이스를 선택할 수 있도록해야합니다.

<?php 

$offerCount = 5; 
$arrayOfferCount = $offerCount-1; 
$displayThisManyOffers = 3; 

$range = range(0, $arrayOfferCount); 

for($i = 0; $i < 1000; $i++) { 
    $vals = array_rand($range, $displayThisManyOffers); 

    foreach($vals as $val) { 
     $counts[$val]++; 
    } 
} 

sort($counts); 
print_r($counts); 

가 생성 :

Array 
(
    [0] => 583 
    [1] => 591 
    [2] => 591 
    [3] => 610 
    [4] => 625 
) 
0

array_rand 가끔 제대로 작동하지 않을 것 (PHP-매뉴얼 코멘트보기 대신 느낌을 직감의 실행을 많이 이상의 벤치 마크는 ... 여기가 1,000 시도입니다).

해결 방법 :도, 배열 크기를 확인하고 패턴을 검출에 mt_rand