php で複数の要素(広告)をn%(パーセント)の確率で表示する関数を作ってみるメモ

ブログやアフィリエイトサイトを運用していると同じ場所に複数の広告(アドネットワークなど)を 50% / 50% で表示してどの広告が適しているのかを検証したくなる。そして検証で得られた数字から A社の広告は, n% B社の広告は n%, … と指定するときのメモ

php

$hoge を 60%, $piyo を 30%, $huga を 10% の確率で表示させたいとする

<?php
function adSp(){
$hoge = <<<EOM
// 広告コード
EOM;
$piyo = <<<EOM
// 広告コード
EOM;
$huga = <<<EOM
// 広告コード
EOM;

      $data = array($hoge, $piyo, $huga);
      $perc = array(60, 30, 10);

      $arr = array();
      foreach($data as $key => $val){
              $arr = array_merge($arr, array_fill(0, $perc[$key], $val));
      }

      shuffle($arr);
      echo current($arr);
}
?>

まとめ

$hoge, $piyo, $huga の変数に格納した広告コードをまずは配列 $data に代入
$perc で $data の合計値が 100 になるように割合を指定する(わかりやすいように合計値を 100 にしている)
$hoge を例に出すと 100 表示するうちの 60回表示し、その中から shuffle して表示しているので正確な意味での 60% ではないかもしれないがおおよそ期待している動きをすると思う
…正確に n% を指定する よりスマートな書き方を考えたい

参考サイト

出典 : PHP: array_merge – Manual

出典 : PHP: array_fill – Manual

出典 : PHP: shuffle – Manual