Изменить на циклический безлимитный цикл while

0

У меня есть фотогалерея с предыдущей и следующей ссылкой. Когда он добирается до последнего изображения, он останавливается. Я хочу, чтобы это началось с первого снимка. Функция является циклом for, и я думаю, что это должен быть цикл while, и некоторые вещи изменились, чтобы сделать его бесконечным циклом. Я просто не знаю, как преобразовать эту функцию. Все еще не так силен в PHP. Любая помощь приветствуется.

$query  = "SELECT pho_id FROM album_photos WHERE alb_id='$alb_id' ORDER by srt_id ASC";
    $ret    = mysql_query($query);
    $num    = mysql_numrows($ret);
    for ($i = 0; $i < $num; $i++)
    {
        $row = trim(mysql_result($ret, $i));
        if ($row == $pho_id)
        {
                        $cur = $i;
            $forw = @trim(mysql_result($ret, ($i+1))) or $forw = NULL;
            $back = @trim(mysql_result($ret, ($i-1))) or $back = NULL;
        }

    }
$query = "SELECT * FROM photos WHERE pho_id='$back'";
        $rets  = mysql_query($query);
        $back_good = mysql_numrows($rets);

        $query = "SELECT * FROM photos WHERE pho_id='$forw'";
        $rets  = mysql_query($query);
        $forw_good = mysql_numrows($rets);

    $back = "photo-$per_id-$back-$alb_id.html";
    $forw = "photo-$per_id-$forw-$alb_id.html";

    if (strstr($back, 'pho_id=&') || $back_good == 0) { $back = NULL; }
    if (strstr($forw, 'pho_id=&') || $forw_good == 0) { $forw = NULL; }
    $ret = array();

    $ret['back'] = $back;
    $ret['next'] = $forw;
    $cur++;
    $ret['viewing']   = "Photo $cur of ".($num);

    if($ret['back'] == NULL){
    $ret['back'] = "";
    $spacer = str_repeat('&nbsp;',12);
    }
    if($ret['next'] == NULL){
    $ret['next'] = "";
    $spacer = str_repeat('&nbsp;',12);
    }
  • 1
    Это должно остановиться в какой-то момент, вы, конечно, не хотите истинного бесконечного цикла. Что такое условие остановки? Может быть, вы можете продемонстрировать какой-нибудь желаемый пример вывода?
  • 0
    Вы, вероятно, должны сесть и переосмыслить, что именно вы хотите делать, потому что использование цикла (конечного или нет) не имеет никакого смысла.
Показать ещё 1 комментарий
Теги:

1 ответ

1
Лучший ответ

Я предлагаю изменить ваш цикл, если это будет такой контент.

$cur = $i;

//compute the indexes of the next and previous elements
//the next item is the first if we are at the end.
$forward_index = $i == $num - 1 ? 0 : $i + 1; 
//the previous one is the last if we are at the beginning.
$backward_index = $i === 0 ? $num - 1 : $i - 1;

//fetch the elements
$forw = @trim(mysql_result($ret, $forward_index));
$back = @trim(mysql_result($ret, $backward_index));

//exit the for loop
break;

Правда, вы могли бы превратить цикл for в цикл while. Однако абсолютной необходимости в этом нет. Я добавил оператор break, чтобы выйти, как только вы найдете элемент, который хотите загрузить.

Изменить: зафиксировал код в соответствии с комментарием OP. Глупая ошибка

  • 0
    спасибо, но это не совсем работа. Я думаю, что остальная часть функции может вызывать проблемы из-за того, как она разработана. Даже несмотря на это, это не делает цикл с изображениями.
  • 0
    На самом деле эта работа вроде как, мне пришлось удалить часть нижнего кода, влияющего на него, чтобы он не показывал Next или Previous. Тем не менее, при циклическом переходе некоторые из pho_id не показываются, вызывая 404. Он пошел к первому изображению после последнего изображения, но второго изображения после этого не было, и pho_id не был извлечен. Хм, мы что-то упустили?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню