Проблема цикла PHP

#php #loops

#php #циклы

Вопрос:

На моем сайте у меня есть сотни строк кода, похожих на это:

 <a href="highslide/images/large/08/02IMG_0012.jpg" class="highslide" 
            onclick="return hs.expand(this, config1 )">
    </a>
    <a href="highslide/images/large/08/03IMG_0020.jpg" class="highslide" 
            onclick="return hs.expand(this, config1 )">
    </a>
    <a href="highslide/images/large/08/04IMG_0019.jpg" class="highslide" 
            onclick="return hs.expand(this, config1 )">
    </a>
    <a href="highslide/images/large/08/05IMG_0011.jpg" class="highslide" 
            onclick="return hs.expand(this, config1 )">
    </a>
  

Мне было интересно, возможно ли использовать PHP, чтобы избавить меня от такого количества строк кода. Изменение имен файлов photos на photo1.jpg , photo2.jpg etc было бы легко с пакетным переименованием. Я просто не уверен, как реализовать PHP, потому что я немного новичок. До сих пор у меня было что-то вроде этого:

 $photo = 1;
$ext = .jpg;

while() {

echo '<a href="highslide/images/large/08/'.$photo.$ext.'" class="highslide" onclick="return hs.expand(this, config1 )">';

$photo  

}
  

Комментарии:

1. Ответы здесь правильные, но есть другой подход: циклический просмотр содержимого каталога, в котором хранятся изображения. (смотрите: php.net/manual/en/function.readdir.php ). Такой подход избавил бы вас от необходимости редактировать PHP-файл каждый раз, когда вы загружаете изображение, и мог бы обрабатывать произвольные имена файлов.

Ответ №1:

Сильно сокращенный код:

 $pics = array("001","002",etc..);

foreach ($pics as $pic)
{
  echo '<a...' . $pic . '..>';
}
  

Это должно продемонстрировать используемый принцип; адаптируйте его к вашим потребностям.

Ответ №2:

Вы почти на месте, вам просто нужно добавить условие выхода в ваш цикл while. Когда цикл должен завершиться? Когда он напечатает все фотографии. Итак, просто добавьте переменную, содержащую количество фотографий, и проверьте условие while:

 $photo = 1;
$ext = '.jpg';
$numberOfPhotos = 100;

while($photo <= $numberOfPhotos) {

    echo '<a href="highslide/images/large/08/'.$photo.$ext.'" class="highslide" onclick="return hs.expand(this, config1 )">';

    $photo  ;

}
  

Комментарии:

1. Вы правы, я просто скопировал код вопроса, не проверяя его 🙂

Ответ №3:

Хотя циклы «while» сделают это, циклы «for» более подходят для последовательной итерации.

 $photoCount = 10;
$ext = .jpg;

for ($i = 1; $i <= $photoCount; $i  ) {
    echo '<a href="highslide/images/large/08/'.$i.$ext.'" class="highslide" onclick="return hs.expand(this, config1 )">';
}
  

Комментарии:

1. Вероятно, это лучшее решение.

Ответ №4:

Используемая вами структура почти правильная. Вам просто нужно добавить способ остановить используемый вами цикл while(). Цикл while будет выполняться до тех пор, пока условие в его круглых скобках не станет ложным. Как это сделал Давиде. Он использовал максимальное число, чтобы остановить цикл.

Ответ №5:

 <?php

$total_photo = 20; // set total number of photo
$photo_url = "highslide/images/large/08/photo"; // set the default photo url
$photo_ext = ".jpg";

for($i = 1; $i <= $total_photo; $i  ):
?>

<a href="<?php echo $photo_url . $i . $photo_ext; ?>" class="highslide" onclick="return hs.expand(this, config1 )">
Photo <?php echo $i; ?>
</a>

<?php endfor; ?>
  

Лучше, если вы просто встроите php-код в html, чтобы он был более читабельным