─━ IT ━─

PHP Tips: 콘텐츠를 랜덤으로 취득하다

DKel 2021. 8. 16. 00:41
반응형
처음에 랜덤으로 광고를 표시하거나 많은 응모자 중에서 몇 명의 당첨자를 랜덤으로 뽑는 경우 등 프로그램에서 랜덤성이 필요한 상황은 여러 가지가 있습니다.이러한 기능을 실현하기 위해, PHP에서 컨텐츠를 랜덤 취득하는 수법에 대해서 몇개의 예를 살펴보겠습니다.대상 독자 PHP를 이미 사용하시는 분을 대상으로 하고 있습니다.기본적인 내용이지만, PHP에 관한 입문용 내용은 포함하고 있지 않습니다.또, Amazon Web 서비스에 대한 기본적인 사용 방법등도 설명하고 있지 않습니다.필요에 따라서 PHP 메뉴얼등의 메뉴얼이나 각 서적을 봐 주세요.필요한 환경 PHP가 인스톨 되어 PHP 스크립트가 동작 가능한 상태인 것을 전제로 하고 있습니다.또한「광고를랜덤으로얻기」는MySQL4.0이설치되고「ad.sql」의실행을통해ad테이블이생성되어야합니다.「Amazon에서 랜덤하게 상품 정보를 취득한다」는 PHP5가 설치되어 Amazon Web 서비스의 디벨로퍼 키트(SDK) 사용에 필요한 디벨로퍼 토큰을 입수할 필요가 있습니다.10회에 1회당 발생시키는 랜덤 값을 취득하는 간단한 예는 mt_rand 함수를 통한 랜덤 수치 취득입니다.무작위로 생성한 수치의 범위에 따라 처리를 분기하는 처리, 예를 들어 10회에 1회당 발생시키고 싶은 경우에 사용됩니다.다음 예제에서는 ′mt_rand(1, 10)′하고 1에서 10사이에 수치를 랜덤으로 취득하고 ′1′일 때는 맞는 것으로 인식하고 있습니다.이를 통해 대략 10회에 1회 정도 특정 처리로 분기할 수 있습니다.number . php
< html >
< head >
랜덤으로 수치를 얻는
< / head >
< body >
< ? php
// ′1′이 나오면 당첨을 통지한다
$ var = mt _ rand ( 1 , 10 ) ;
if ( $ var == 1 ) {
echo ′

당합니다.′;
}
echo ′

취득한 값:′.$var;
?>
< / body >
당첨자를 2명 뽑는 앞의 방법에서는 10회에 1회꼴로 당첨을 발생시킬 수 있는데 랜덤으로 발생시키는 당첨 횟수가 정해져 있는 경우는 문제도 있습니다.예를 들어, 응모자 중에서 당첨자를 2명 뽑는 것과 같은 케이스입니다.「10회에 1회」와 같이 확률을 컨트롤 하고 당첨을 발생시켜 가면 「대체로」상정의 범위내에서 진행되겠지만, 결과에 격차가 생겨 경우에 따라서는 상정한 당선자 이상이 나와 버릴지도 모릅니다.전원의 응모자 중에서 2명의 당첨자를 선택할 경우, 응모자 분의 요소를 가지고, 값이 「0」인 배열을 준비하고, 당선을 나타내는 「1」을 2개 세팅해 둡니다.shuffle 함수에 따라 배열을 셔플함으로써 당첨자를 나타내는 인덱스가 랜덤 위치로 이동하므로 1이 세팅되어 있는 요소를 가져오면 당첨자를 2명 선택할 수 있습니다.배열을 출력한 다음 그림으로는 다카하시, 사토가 당선되었음을 나타내고 있습니다.shuffle . php
< html >
< head >
당첨자 2명 뽑기
< / head >
< body >
< ? php
//응모자 이름
$array_name= array(′다나카′, ′다카하시′, ′고바야시′, ′사토′, ′스즈키′);

//당첨자 인덱스를 셔플하다
$ array _ value = array ( 1 , 1 , 0 , 0 , 0 ) ;
shuffle ( $ array _ value ) ;

//응모자와 당첨자의 인덱스를 결합하는
$ array _ result = array _ combine ( $ array _ name , $ array _ value ) ;

// 배열을 출력하다
print _ r ( $ array _ result ) ;
?>
< / body >
광고를 랜덤하게 취득하는 데이터베이스에 격납한 광고 등 랜덤하게 데이터를 취득하고 싶은 경우도 있습니다.MySQL이라면, SELECT 명령에 「ORDER BY RAND()」를 부가하는 것에 의해서, 취득하는 데이터를 랜덤으로 정렬할 수 있습니다.다음 예제에서는 ad테이블에서 SELECT명령으로 데이터를 가져올 때 ORDER BY RAND()를 기술하고 있으므로, 이 명령으로 반환되는 광고 데이터가 랜덤으로 전환됩니다.mysql_connect 함수 내의 패스워드는 본인이 사용하는 값을 설정하십시오.ad . php
< html >
< head >
광고를 랜덤으로 가져오는
< / head >
< body >
< ? php
//데이터베이스에 접속하기
$ conn = mysql _ connect ( ′ localhost ′ , ′ root ′ , ′ ******** ′ ) ;
mysql _ select _ db ( ′ test ′ , $ conn ) ;

//행을 랜덤순으로 가져오기
$ sql = ′ SELECT * FROM ad ORDER BY RAND ( ) LIMIT 0 , 1 ′ ;
$ res = mysql _ query ( $ sql , $ conn ) ;

$ row = mysql _ fetch _ array ( $ res , MYSQL _ ASSOC ) ;
echo mb _ convert _ encoding ( $ row [ ′ adtext ′ ] , ′ SJIS ′ , ′ EUC - JP ′ ) ;

mysql _ close ( $ conn )
?>
< / body >
Amazon에서랜덤으로상품정보를취득하는파일에서랜덤으로줄을취득하고싶은경우도있습니다.여기서소개하는예(PHP5에서만동작)는AmazonWeb서비스를이용해랜덤하게상품정보를취득하는예입니다.Amazon Web 서비스에서 상품 정보를 취득할 경우, 상품 코드(ISBN이나 ASIN)나 검색 키워드 등의 파라미터를 서버에 송신합니다.정보를 얻고 싶은 상품이 여러 개 있는 경우, 서버에 상품코드 리스트를 저장해 두었다가 스크립트 실행 시 무작위로 코드를 취득하면 표시되는 상품 정보를 무작위로 전환할 수 있습니다.이 경우 데이터베이스에 상품 코드를 저장해 두어도 좋지만, 그다지 많은 상품을 대상으로 하지 않는다면 텍스트 파일로도 필요가 있습니다.다음 예에서는 상품코드 리스트 에 저장된 상품 코드를 무작위로 취득하고 Amazon에서 상품 정보를 취득합니다.먼저 ′asin.txt′를 file 함수로 읽고 shuffle 함수로 배열 요소를 셔플합니다.이를통해처리대상상품을스크립트실행시전환하고있습니다.단, 배열에서 취득한 상품코드에는 줄바꿈 문자가 포함되어 그대로 Asin Search Request 메서드의 실행 파라미터에 사용하면 잘 안 될 수가 있으므로 rtrim 함수로 줄바꿈을 삭제해 두는 것이 좋습니다.또한 파라미터로 사용하는 배열 $params 내의 ′tag′ 이나 ′devtag′ 는 본인이 사용하시는 값을 설정해주시기 바랍니다.또, mb_convert_encoding 함수의 문자 코드 지정도 사용의 문자 코드에 맞추어 변경해 주세요.aws . php
< html >
< head >
Amazon에서 랜덤하게 상품 정보를 가져오는
< / head >
< body >
< ? php
//상품코드 랜덤으로 가져오기
$ data = file ( ′ asin . txt ′ ) ;
shuffle ( $ data ) ;
$ asin = rtrim ( $ data [ 0 ] ) ;

//아마존 웹 서비스 접속하기
$ sc = new SOAPClient
( ′ http://soap.amazon.co.jp/schemas3/AmazonWebServices.wsdl ′ ) ;

$ params = array (
′ asin ′ = > $ asin ,
′ tag ′ = > ′ ******** ′ ,
′ devtag ′ = > ′ ******** ′ ,
′ type ′ = > ′ lite ′ ,
′ locale ′ = > ′ jp ′
);

//Asin Search Request 메서드를 실행하여 상품명을 표시함
$ result = $ sc - > AsinSearchRequest ( $ params ) ;
$ productName = $ result - > Details [ 0 ] - > ProductName ;
echo mb _ convert _ encoding ( $ productName , ′ SJIS ′ , ′ UTF - 8 ′ ) ;
?>
< / body >
정리 본고에서는, 컨텐츠의 랜덤 취득에 관해서 다음과 같은 포인트를 설명했습니다.필요에 따라서 되돌아 봐 주세요.수치 랜덤 취득에는 mt_rand 함수를 사용한다
shuffle 함수를 사용하면 배열 값이 셔플된다
MySQL에서는 ′ORDER BY RAND()′에 의해 취득 데이터가 랜덤화되는
file 함수와 shuffle 함수로 텍스트 파일에서 임의의 행을 취득할 수 있는 참고 자료 『PHP 사전』 니시자와 나오키 저, 쇼에이사, 2005년 1월
『PHP에 의한 Web 어플리케이션 슈퍼 샘플』니시자와 나오키 저, 소프트뱅크 퍼블리싱, 2002년 9월

반응형