#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, чтобы он был более читабельным