2

そのため、5 つの異なる変数を交互に使用しようとしていますが、各変数で「負荷」を等しくしたいと考えています。2 つの変数だけを使用して、制限が設定された状態で生成された乱数に基づいて交互に実行されるのを見てきました。しかし、その考えを 5 つの変数に拡張しようとしています。前もって感謝します。

例として、5 つの画像があり、100 回のテスト後に各画像を均等に表示したいとします。これは、私が考えることができる最も簡単な説明方法です。

これは私が2つの変数だけでやった方法ですが、もっと多くの変数でそれを行う方法を考えようとしています.

$ad1 = '<img src... >';
$ad2 = '<img src...2 >';

echo mt_rand(0, 1) ? $ad1 : $ad2;

出典:PHP データベースを使用せずに2つの変数を均等に切り替える

ですから、これは私が行っていることであり、さまざまな変数の間に均等に存在するという考えが何であるかを知りたいだけです.

$input = array("a", "b", "c", "d");
$rand_keys = array_rand($input);
echo 'var key ="'.$input[$rand_keys].'"';
4

3 に答える 3

3

質問のタイトルが「5つの変数を均等に切り替える」ため、以下の2つのオプションがあります-等分布ソリューションとランダム化ソリューションがあります。

等回転ソリューションを機能させるには、apc をインストールする必要があることに注意してください。これはかなり一般的な php モジュールであり、許可があれば非常に簡単にインストールできます。

Redhat/centos : yum install php-apc

Ubuntu: sudo apt-get php-apc

共有ホスティングを使用していて、apc がインストールされていない場合、これは機能しません :(

<?php

//If you want perfectly equal distribution.
$variables = array('a', 'b', 'c', 'd', 'e');
if (!($this_var = apc_fetch('last'))) $this_var = 0;
echo $variables[$this_var];
$this_var++;
$this_var = $this_var % 5;
apc_store('last', $this_var);


//If you want random distribution
$variables = array('a', 'b', 'c', 'd', 'e');
$index = mt_rand(0, 4);
echo $variables[$index];
于 2013-10-07T21:47:44.543 に答える
2

セットからランダムに選択したい場合は、 を使用できますarray_rand()

$images = array( '<img src="img1.png">', '<img src="img2.png">', '<img src="img3.png">', '<img src="img4.png">', '<img src="img5.png">' );

$pick = array_rand( $images );

$pick$images配列からのランダムなキーになります。

配列に要素を追加し続けることができるため、これは簡単に拡張できます。ここではもちろん、<img>タグを配列に追加する例に従っていますが、配列に識別子だけを簡単に追加することもできます。

于 2013-10-07T21:49:28.587 に答える
0

クラスを使用して各「オブジェクト」を処理することをお勧めします。

<?php
  ...
  ...
  class RandObjClass
  {
     var $myCounter = 1;
     var $mySeed = time();
     var $myReference = "...path-to-image-file..."; # Image for example
     function getWeight() {
        srand($mySeed);
        $myWeight = $this->myCounter * rand();
        return($myWeight);
     }
     setSeed($xSeed) {
        $this->mySeed = $xSeed;
     }
  }
...
...

x 個の「RandObjClass」オブジェクトの配列を埋め、「getWeight」を使用して、「最も高い」重みの次のものを選択します。

カウントなど、さまざまな方法で重みに影響を与えることができます。これは、次に選択されるものに影響を与える可能性があります。

于 2013-10-07T21:47:12.897 に答える