#php #random #shuffle
#php #Случайный #перемешать
Вопрос:
У меня есть следующие изображения, которые я использую для карусели. Каждый раз, когда страница загружается, я хочу, чтобы они были в другом порядке. Я думал просто упорядочить числа с помощью генератора случайных чисел, но тогда я не уверен, как сделать так, чтобы числа использовались только один раз. Если бы это можно было сделать в цикле, чтобы его можно было расширять, это было бы здорово.
Смотрите статический код ниже, все изображения называются одинаково, за исключением номера в конце
<div class="image-entry">
<img src="/images/carousel-1.jpg" />
</div>
<div class="image-entry">
<img src="/images/carousel-2.jpg" />
</div>
<div class="image-entry">
<img src="/images/carousel-3.jpg" />
</div>
<div class="image-entry">
<img src="/images/carousel-4.jpg" />
</div>
Спасибо!
Ответ №1:
Для этого есть функция, shuffle()
:
$images = array
(
'/images/carousel-1.jpg',
'/images/carousel-2.jpg',
'/images/carousel-3.jpg',
'/images/carousel-4.jpg',
);
shuffle($images); // the magic
foreach ($images as $image)
{
echo '<div class="image-entry">';
echo "t" . '<img src="' . $image . '" />';
echo '</div>';
}
Комментарии:
1. вау … в случайном порядке … даже не подумал посмотреть это. Спасибо!
2. @Phil: Без проблем, в PHP есть встроенные функции практически для всего. =)
3. [Не по теме] : Забавно, что самые простые ответы всегда получают большое количество голосов «за», в то время как сложные — нет…
Ответ №2:
Предполагая, что вы знаете, сколько изображений (скажем, 4) вам нужно, и что все изображения до этого числа являются допустимыми и начинаются с 1:
<?php
$images = range(1, 4);
shuffle($images);
foreach ($images as $_) {
echo <<<HTML
<div class="image-entry">
<img src="/images/carousel-$_.jpg" />
</div>
HTML;
}
Ответ №3:
Создайте массив чисел / имен изображений, затем перетасуйте массив, а затем выведите его, вот так.
$images[0] = 'car-1.jpg';
$images[1] = 'car-2.jpg';
$images[2] = 'car-3.jpg';
shuffle($images);
foreach($images as $img){
echo '<img src="'.$img.'" />';
}
Вы можете адаптировать приведенный выше код в соответствии с вашими потребностями.
Ответ №4:
<?php
$imageArr = glob( rtrim( $_SERVER['DOCUMENT_ROOT'] , '/' ).'/images/carousel-*.jpg' );
shuffle( $imageArr );
$outPattern = '<div class="image-entry"><img src="%s" /></div>';
foreach( $imageArr as $carImage )
echo sprintf( $outPattern , $carImage )."n";
Преимущества этого решения в том, что оно автоматически обнаружит все вызываемые изображения carousel-X.jpg в папке images и используйте их в карусели.
Или даже:
<?php
$imageArr = glob( rtrim( $_SERVER['DOCUMENT_ROOT'] , '/' ).'/images/carousel-*.jpg' );
shuffle( $imageArr );
if( count( $imageArr ) ){
echo '<div class="image-entry"><img src="'.implode( '" /></div><div class="image-entry"><img src="' , $imageArr ).'" /></div>';
}else{
echo '<!-- No Images in Array //-->';
}
Комментарии:
1.
shuffle
работает с массивом по ссылке и возвращает логическое значение, указывающее на успех или неудачу. Поэтому вы должны передать ему переменную (не выражение), и ваш результат будет в переданной переменной, а не в возвращаемом функцией значении.2. Ценю комментарий и исправление, Миккель. Я обновил свой ответ, чтобы отразить это.