Как дать различное значение переменной для каждой итерации?
$azul = "#4285f4"; // Azul
$verde = "#34a853"; // Verde
$amarillo = "#fbbc05"; // Amarillo
$rojo = "#ea4335"; // Rojo
$color = rand(1, 4);
Я использую $color
и внутри loop но это настолько просто, что это мой код, значение переменной повторяется, тип: 3, 3, 1
.
Как сделать так, чтобы в 3 iteraciones
значение не повторялось? формирующ последовательности типа 1, 2, 3
, 1, 3, 2
, 3, 2, 1
, 3, 1, 2
, и т. д ...
while ( $destacados->have_posts() ) {
if($color == 1) { $color = $azul; }
elseif ($color == 2) { $color = $verde; }
elseif ($color == 3) { $color = $amarillo; }
elseif ($color == 4) { $color = $rojo; }
}
оригинальный вопрос (португальский) : Как приписать различное значение различному в каждом цикле? - Стек переполняет их. - Я не знаю, - сказал он.
2 answers
Предполагая, что существует массив с именем $colores
размера k
, и вы хотите заполнить массив $colores_aleat
размера N
, я могу придумать два возможных случая:
- Если
N <= k
, то просто сделайте перестановку$colores
и возьмите первыеN
элементы этой перестановки. - Если
N > k
, то вы должны генерироватьp = N / k
перестановки (округленные до верхнего целого числа), и "объединить"p
перестановки, и взять первыеN
входы
Давайте посмотрим, если это работает:
$colores = array("rojo", "verde", "azul", "amarillo");
$k = count($colores);
$N = 10; // Valor de ejemplo; el array $colores_aleat tendrá $N entradas
if($N <= $k) {
/*
Si el número de colores a obtener es menor o igual que el número de colores disponibles
basta con obtener los primeros $N elementos de una permutación de $colores
*/
$colores_aleat = array_slice(shuffle($colores), 0, $N);
} else {
/*
Si el número de colores a obtener es mayor que el número de colores disponibles
entonces hay que llenar el arreglo con permutaciones sucesivas
*/
$colores_aleat = array();
$p = ceil($N / $k);
for($i = 1; $i <= $p; $i++) {
$colores_aleat = array_merge($colores_aleat, shuffle($colores));
}
$colores_aleat = array_slice($colores_aleat, 0, $N);
}
Возможно, это не самая эффективная вещь, но она работает.
Надеюсь, это полезно.
Вы определяете цветовое расположение вместо переменных независимо и используете метод shuffle, чтобы изменить их положение, а затем с помощью array_shift()
вы удаляете то, что вы больше не используете, следующим образом:
<?php
$colores = ["#4285f4", "#34a853", "#fbbc05","#ea4335"];
shuffle($colores);
$i = 0;
$tot = count($colores);
while($i < $tot){
echo array_shift($colores);
$i++;
}