Попытка получить случайное значение массива для отображения на элементе класса

1

Как и в вопросе, я работаю с функцией 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]]; ?>">
  • 0
    почему вы выбираете 2 из массива и используете только 1?
  • 0
    Это цикл, и я хочу, чтобы класс был случайно назначен циклу для использования изотопной кладочной сетки, есть только два класса, из которых мне нужно выбрать случайным образом
Показать ещё 2 комментария
Теги:
arrays

2 ответа

1
Лучший ответ

так как вам нужен только один элемент массива, вы можете комбинировать (случайный) выбор и отображение на удобном однострочном пространстве:

echo $masonry_classes[array_rand($masonry_classes)];

ref: array_rand()

1

Похоже, вы неправильно поняли, как работает 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); ?>"
  • 0
    Извините, я не понимаю, для чего понижатель. Я думал, что четко объяснил автору, что он / она делает неправильно.
  • 0
    Я думал, что это был довольно подробный ответ и помог прояснить мое замешательство. Дагон ответил первым и сослался на ссылку, но спасибо за ваш ответ, потому что это помогло :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню