Производительность переменной сеанса PHP - PullRequest
0 голосов
/ 25 июня 2011

Мне было интересно, является ли приведенный ниже код наиболее эффективным использованием переменных сеанса в PHP.

<?
session_start();
if (!isset($_SESSION['count']) || !isset($_SESSION['randomArray'])) {
  $count = 0;
  $randomArray = array();
  $sql="SELECT youtubeurl FROM Foodlist";
  $result=mysql_query($sql);
  while($row=mysql_fetch_array($result)){
       array_push($randomArray,$row['youtubeurl']);
  }
  shuffle($randomArray);
  $_SESSION['randomArray'] = $randomArray;
  $_SESSION['count'] = $count; 
} elseif ($_SESSION['count'] >= sizeof($_SESSION['randomArray'])){
  $_SESSION['count'] = 0;
  $randomArray = $_SESSION['randomArray'];
  shuffle($randomArray);
  $_SESSION['randomArray'] = $randomArray;
} else{
  $randomArray = $_SESSION['randomArray'];
  $count = $_SESSION['count'];
  echo $randomArray[$count];
  $_SESSION['count']++;
}
?>

Цель кода должна быть очевидной, если я сделал это правильно.Но в основном существует список (randomArray) строк, который проходит один раз.После каждого полного прохода список перемешивается.Каждый элемент печатается один раз, прежде чем какой-либо отдельный элемент будет напечатан дважды.

Итак, это самый эффективный способ сделать это?

1 Ответ

1 голос
/ 25 июня 2011

Я бы упростил это следующим образом:

if (empty($_SESSION['randomList'])) {
    $result = mysql_query("SELECT youtubeurl FROM Foodlist"); // or die(mysql_error())
    while ($row = mysql_fetch_assoc($result)) {
       $_SESSION['randomList'][] = $row['youtubeurl'];
    }
    shuffle($_SESSION['randomList']);
}

echo array_shift($_SESSION['randomList']);
...