3

同じアイテムを繰り返さずに、配列からランダムなアイテムを選択しようとしています。

サンプル配列

$images=array();
$images[]=array('img'=>'bands.jpg','cat'=>'bands.php');
$images[]=array('img'=>'cake.jpg','cat'=>'cakes.php');
$images[]=array('img'=>'catering.jpg','cat'=>'catering.php');
$images[]=array('img'=>'dj.jpg','cat'=>'djs.php');
$images[]=array('img'=>'dress.jpg','cat'=>'dress_attire.php');
$images[]=array('img'=>'limos.jpg','cat'=>'limos_transportaion.php');
$images[]=array('img'=>'photography.jpg','cat'=>'photography.php');
$images[]=array('img'=>'venues.jpg','cat'=>'venues.php');
$images[]=array('img'=>'wedding_planer.jpg','cat'=>'planning.php');

私は以下を試しましたが、何らかの理由で正しく動作しません。配列の最初のアイテムを、レンダリングされたカウントまで収集するだけです。// $ adDisplayは1〜9の数値です

$rand = array_rand($images, $adDisplay);
foreach($rand as $key => $value){
    echo'<a href="'.$images[$key]['cat'].'"><img src="img/banners/'.$images[$key]['img'].'" border="0" alt="" /></a>';
}
4

6 に答える 6

3

これを行う多くの方法では、おそらく配列をシャッフルしてからスライスします。

$images = array();
$images[]=array('img'=>'bands.jpg','cat'=>'bands.php');
$images[]=array('img'=>'cake.jpg','cat'=>'cakes.php');
$images[]=array('img'=>'catering.jpg','cat'=>'catering.php');
$images[]=array('img'=>'dj.jpg','cat'=>'djs.php');
$images[]=array('img'=>'dress.jpg','cat'=>'dress_attire.php');
$images[]=array('img'=>'limos.jpg','cat'=>'limos_transportaion.php');
$images[]=array('img'=>'photography.jpg','cat'=>'photography.php');
$images[]=array('img'=>'venues.jpg','cat'=>'venues.php');
$images[]=array('img'=>'wedding_planer.jpg','cat'=>'planning.php');

shuffle($images);

$adDisplay = 5;

foreach( array_slice($images,0,$adDisplay) as $image){
    echo '<a href="' . htmlspecialchars($image['cat']) . '">'
         . '<img src="img/banners/'
         . htmlspecialchars($image['img']) . ' border="0" alt="" />'
         . '</a>';
}
于 2012-12-21T22:26:32.860 に答える
0

array_randランダムキーを値として返します。実際に使用したい$images[$value]['cat']。またarray_rand、1つのアイテムが要求された場合、配列を返さないことに注意してください。あなたはそれを特別に扱わなければなりません。

于 2012-12-21T22:14:19.440 に答える
0

キーはインデックスになり、値は確率変数になるため、画像配列へのインデックスとしてキーの代わりに値を使用します。乾杯。

于 2012-12-21T22:15:55.020 に答える
0

配列をランダムな順序にする場合に使用shuffleします。

shuffle($images);

foreach($images as $img) {
    echo($img['cat']);
}

またはarray_rand、ランダムキーを取得するために使用します。

$key = array_rand($images);

echo($images[$key]['cat']);
于 2012-12-21T22:40:08.397 に答える
0

array_randを使用して、変数またはどこかに最新のキーを格納できます。

random_key == last_used_keyの場合、Random_key + 1

それより難しくはない:-)

于 2013-03-31T10:38:35.503 に答える
0

代替案:

$images = array();
$images[]=array('img'=>'bands.jpg','cat'=>'bands.php');
$images[]=array('img'=>'cake.jpg','cat'=>'cakes.php');
$images[]=array('img'=>'catering.jpg','cat'=>'catering.php');
$images[]=array('img'=>'dj.jpg','cat'=>'djs.php');
$images[]=array('img'=>'dress.jpg','cat'=>'dress_attire.php');
$images[]=array('img'=>'limos.jpg','cat'=>'limos_transportaion.php');
$images[]=array('img'=>'photography.jpg','cat'=>'photography.php');
$images[]=array('img'=>'venues.jpg','cat'=>'venues.php');
$images[]=array('img'=>'wedding_planer.jpg','cat'=>'planning.php');

for ($i = 0; $i < $adDisplay AND sizeof($images) > 1; $i++) {
    $k = array_rand(0, sizeof($images)-1);
    $image = $images[$k];
    unset($images[$k];
    sort($images);
    echo '<a href="' . htmlspecialchars($image['cat']) . '">'
         . '<img src="img/banners/'
         . htmlspecialchars($image['img']) . ' border="0" alt="" />'
         . '</a>';
}

したがって、ランダムなキーを選択し、そのレコードを配列から削除して表示し、次のラウンドのために配列を再ソートします。十分に表示されるか、レコードがなくなるまで続行します。

于 2013-11-04T15:44:33.450 に答える