while 반복중 중복되는 값을 제거하고자 합니다.
본문
한번에 100개의 6자리 랜덤난수를 생성하기위해
while 문을 통해 반복 시켰습니다.
1회 반복 후 DB에 있는 100개의 값과 2회차 while 문의 생성 랜덤난수를 비교하여
중복된 값이 있을 경우 멈추는 것이 아닌 중복된 값을 빼고 100개를 생성하여 DB에 입력하려고 합니다.
do {
$rand_num = srand((double)microtime()*1000000); // 등등 랜덤난수 function 을 만들어서 영어대문자와 숫자 조합으로 만들고 있습니다.
$sql = "select count(*) as cnt from g5_test where rand_num = '{$rand_num}' ";
$row = sql_fetch($sql);
$rand_list[$rand_num] = $rand_list;
if($row['cnt']) break; // DB에 있으면 멈춤
} while (count($rand_list) < 100);
foreach($rand_list as $rand) {
$sql_insert; // DB에 입력
}
코드를 작성하여 테스트 중입니다.
어떻게 하면 중복값에서 멈추지 않고 매 실행 시 마다 중복값을 제외한 후 100개씩 딱 떨어지게 나올 수 있을까요?
도저히 머리가 굴러가지 않아 폭풍 검색 하다 질문 남깁니다.
감사합니다.
!-->
답변 3
do {
$rand_num = srand((double)microtime()*1000000);
$sql = "select count(*) as cnt from g5_test where rand_num = '{$rand_num}' ";
$row = sql_fetch($sql);
if ($row['cnt'] == 0)
$rand_list[] = $rand_num;
} while (count($rand_list) < 100);
foreach($rand_list as $rand) {
$sql_insert;
}
테이블에 먼저 등록된 값을 100번이나 체크할 이유는 없습니다
아래 코드로 하세요
$numArr = range(100000, 999999);//6자리 숫자 전부를 배열에 담으세요
shuffle($numArr); //----배열을 흔들어 주세요
$newArr = array_slice($numArr, 0,100); //100개만 잘라오세요
$numStr ='('. implode("),(", $newArr).')'; //테이블에 기록시 한번에 등록 하도록 합치세요
$insert_qry ="insert into Tablek (wr_1) values $numStr ";
sql_query($insert_qry ); //insert 쿼리는 한번만 하면 됩니다
!-->
두 분 모두 답변 감사합니다.
균이님의 코드의 경우는 DB에 있는것과는 비교 할 수 없는거죠? 2회차 3회차 등 계속 다회차 작성할 경우 매번 100개씩만 새로 만드시는 방법인건가요?