порядок изображений в случайном порядке в php

#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. Ценю комментарий и исправление, Миккель. Я обновил свой ответ, чтобы отразить это.