{@
$a = array(0, 1, 2 ,3 ,4 ,5);
shuffle($a);
$b = array_pop($a);
}

 

이렇게 해서 사용한 적이 있습니다. 이렇게 하면 범위가 아닌 위 제시된 것 중 1개가 뽑히더군요.

 

그런데 0~5 까지의 범위 안에서 중복없이 2개를 뽑아 배열에 담아 두고 이렇게 뽑힌 2개를 사용하려고 합니다.

 

  • profile

    $a = range(0, 5); // 0~5까지의 숫자로 이루어진 배열을 자동 생성

    shuffle($a);

    $b = array_pop($a);

    $c = array_pop($a);

     

    이렇게 두 개 뽑으면 됩니다.

    단, 갯수가 아주 많은 경우 이렇게 배열을 만들어서 섞는 방식은 다소 느릴 수 있어요.

    겨우 2개 뽑으려고 수만 개를 섞어야 한다면 비효율적이겠지요?

  • profile profile
    먼저뽑힌 것은 제외하고 뽑게 되는건가요??
  • profile profile
    array_pop으로 뽑으면 원본 배열에서 해당 값이 삭제됩니다. 따라서 원본 배열 내에 중복이 없었다면 결과에도 중복이 발생하지 않습니다.
  • profile profile
    게시판 목록에 인피드 광고를 좀더 불규칙하게 노출 되도록 하려고 질문 작성했는데 잘 처리 되었네요 ㅋ

    {@
    $a = range(0, $module_info->list_count - 5); // 0~5까지의 숫자로 이루어진 배열을 자동 생성
    shuffle($a);
    $b = array_pop($a);
    $c = array_pop($a);
    }

    $i==$b || $i==$c || $module_info->list_count - 1 == $i