Как и в вопросе, я работаю с функцией array_rand
в php, и моя цель - заставить эту функцию произвольно генерировать класс в моем цикле. В настоящее время он просто печатает второе значение в массиве каждый раз. Как я могу получить это эхо-случайный класс для div в моем цикле?
if ($featured_query->have_posts()) :
while ($featured_query->have_posts()) :
$featured_query->the_post();
$masonry_classes = array(
'grid-item',
'grid-item--width2'
);
$random_class = array_rand($masonry_classes, 2);
?>
<li <?php //post_class( $classes ); ?> class="<?php echo $masonry_classes[$random_class[1]]; ?>">
так как вам нужен только один элемент массива, вы можете комбинировать (случайный) выбор и отображение на удобном однострочном пространстве:
echo $masonry_classes[array_rand($masonry_classes)];
ref: array_rand()
Похоже, вы неправильно поняли, как работает array_rand
.
Если вы не укажете второй параметр или не установите его в 1
, функция вернет целое число, которое является индексом случайной записи в массиве.
Если вы установите второй параметр на число больше 1
функция вернет массив случайно выбранных индексов.
Итак, если вы это сделаете:
$rand = array_rand($masonry_classes);
... вы получите либо 0
либо 1
(потому что ваш массив содержит две записи, индексы которых равны 0
и 1
соответственно). В этом случае вы можете сделать
$class = $masonry_classes[array_rand($masonry_classes)];
для извлечения одного случайного класса и следующего для его печати:
class="<?php print $class; ?>"
Если вы это сделаете
$rand = array_rand($masonry_classes, 2);
то он вернет 2 случайных индекса, которые в вашем случае равны 0
и 1
.
Чтобы получить соответствующие записи, вам нужно будет сделать следующее:
$classes = array_intersect_key($masonry_classes, array_flip($rand));
Чтобы сделать их в вашем HTML, просто выполните следующее соединение:
class="<?php print join(' ', $classes); ?>"