2012-12-01 3 views
1

Я хотел бы показать 3 случайных изображения из базы данных на моем сайте. Ниже его код:Неопределенная область переменных в PHP

$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 в строке ... // Первая строка makernd() ,

Но я ожидал, что $ my_array станет доступным массивом для этой функции.
В чем проблема?

+0

Вы либо передадите массив своей функции, либо определите ее как глобальный var. – jtheman

+0

Почему вы условно определяете функцию внутри 'if'? Это не добавляет ничего, кроме путаницы. –

ответ

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. Устранение чрезмерных циклов & recurs иона в 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] - как будто вы когда-либо меняете порядок запроса, вы будете разорвать ссылки по индексу.

Смежные вопросы