1

私のウェブサイトのデータベースから3つのランダムな画像を表示したいと思います。以下はそのコードです:

$query = mysql_query ("SELECT id,url FROM tbl_gallery2");
if (mysql_num_rows($query) >= 3) {
    $my_array = array();
    $last_array = array();
    while ($r = mysql_fetch_row($query)) {
        $my_array[] = $r[1];
    }

    function makernd () {
        $number = array_rand($my_array,1);
        if (in_array($number,$last_array)) {
            makernd();
        } else {
            $last_array[] = $number;
            return $number;
        }
    }

    for($i = 1 ; $i < 3 ; $i++) {
        $item = makernd();
        echo '<img src="./images/slider/'.$item.'.jpg" alt="" class="slider" />';
    }

}

しかし、このコードを実行すると、次のエラーが発生します。

未定義の変数:my_array in line ... // makernd()関数の最初の行。

しかし、私は$my_arrayがこの関数のアクセス可能な配列であることを期待していました。
どうしたの?

4

1 に答える 1

3

問題を簡単に修正するには、パラメータとしてに渡す必要が$my_arrayありmakernd()ます。

$query = mysql_query ("SELECT id,url FROM tbl_gallery2");
if (mysql_num_rows($query) >= 3) {
    $my_array = array();
    $last_array = array();
    while ($r = mysql_fetch_row($query)) {
        $my_array[] = $r[1];
    }

    function makernd ($my_array) {
        $number = array_rand($my_array,1);
        if (in_array($number,$last_array)) {
            makernd($my_array);
        } else {
            $last_array[] = $number;
            return $number;
        }
    }

    for($i = 1 ; $i < 3 ; $i++) {
        $item = makernd($my_array);
        echo '<img src="./images/slider/'.$item.'.jpg" alt="" class="slider" />';
    }

}

ただし、MySQLにランダム化を配置することを強くお勧めします。

  1. コードを簡素化する
  2. パフォーマンスを大幅に向上させ、
  3. PHPでの過度のループと再帰を排除します

例:

$sql = "SELECT id,url 
        FROM tbl_gallery2 
        ORDER BY RAND() 
        LIMIT 3";
$query = mysql_query ($sql);
if (mysql_num_rows($query) >= 3) {
    while ($r = mysql_fetch_row($query)) {
        echo '<img src="./images/slider/' . $r[1] . '.jpg" alt="" class="slider" />';
    }
}

PS-廃止されたようmysqliに、を使用するようにコードを更新することもお勧めしますmysql

PPS-またmysqli_fetch_assoc、インデックスではなく名前でクエリ結果を参照できるようにすることをお勧めします(たとえば、クエリの順序を変更した場合のよう$r['url']に、インデックスで参照を分割します。$r[1]

于 2012-12-01T14:27:05.127 に答える