2012-06-28 4 views
4

웹 페이지에 배너를 일부 표시해야합니다. 배너 수는 10 개 (최대 10 개)입니다. 데이터베이스의 배너 및 각 배너 폴더 수를 설정할 수 있습니다. 배너 이미지는 카테고리를 기반으로 별도의 서버 폴더에 저장됩니다. 배너가 열에 표시됩니다.중복이없는 난수 생성

내 코드 long1, long2, ... long10 데이터베이스에서 디렉토리 이름입니다, 여기서, 입니다

$array=array(); 
     for($n=1;$n<=$long;$n++) 
     { 
     $files = array(); 
     $dir=${'long'.$n}; 

       if(is_dir($dir)) 
       { 
       $openDir = opendir($dir); 
         while (false !== ($file = readdir($openDir))) 
         { 
           if ($file != "." && $file != "..") 
           { 
             $files[] = $file; 
           } 
         } 
       closedir($openDir); 
       } 


mt_srand((double) microtime()*1000000); 
$randnum = mt_rand(0,(sizeof($files)-1)); 

$arraycount=count($array); 
for($index=0;$index<=$arraycount;$index++) 
{ 
if(!in_array($array,$randnum)) 
    { 
     $array[]=$randnum; 
    } 

} 

$img = $dir."/".$files[$randnum]; 

    <input type="image" class="advt_image" src="<?=$img;?>" alt="" name=""/> 
} 

예 : 7 배너가 데이터베이스에 설정이 있다면, 나는 다른 7 개 배너를 표시해야 또는 동일한 폴더 (일부 배너는 같은 폴더에 있음). 웹 페이지를 표시 할 때마다 중복 배너를 피할 필요가 있습니다.

각 난수를 저장할 배열을 할당했습니다. 코드에서 무엇인가를 변경해야합니까? 어떤 생각/생각?

감사합니다.

+0

무엇이 문제입니까? –

+0

나는 모든 가능한 숫자의 배열로 시작하고 내가 충분히 가질 때까지 새로운 배열로 숫자를 임의로 추출합니다. 그런 식으로 반복하지 마십시오. – TheZ

+1

$ index <= $ arraycount 여서는 안되며, $ index <10 (또는 원하는 이미지 수)이어야합니다. –

답변

0

루프의 $ files 배열에서 표시되는 이미지를 제거 할 수 있습니다. 즉 루프의 배열 길이를 확인해야합니다. 이 경우 array_diff을 사용할 수 있습니다.

$files = array(...); // this holds the files in the directory 
$banners = array(); // this will hold the files to display 
$count = 7; 
for($i=0;$i<$count;$i++) { 
    $c = mt_rand(0,count($files)); 
    $banners[] = $files[$c]; 
    $files = array_diff($files, array($files[$c])); 
} 

// now go ahead and display the $banners 
0

에 이전보다 배너의 목록을 유지하는 배열을 만들 것이 문제를 해결하는 간단한 방법을 처음 열을 방출하여이 배열을 셔플하면 각이 발생합니다 그들을 표시합니다.

코드를 읽지 못했습니다 (죄송합니다).하지만 여기에 가능한 기본 개념이 있습니다.

$bannerList = array(); 

//Now, check if the list contains the banner before adding it 
while($rows) { //your big list of banners 

    if(!in_array($rows['bannerpath'])) { 
     $bannerList[] = $rows['bannerpath']; 
    } 

}