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_arraytomakernd()作为参数传递:

$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 回答