Как давать стоимость, отличную от переменной из-за каждого повторения?

$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; }
}

Первоначальный вопрос (португальский язык): Как присуждать um различную стоимость в variável em каждый loop? - Stack Overflow em Português

18
задан 13.04.2017, 15:59
2 ответа

Понимая, что существует так называемый array $colores размера k, и ты хочешь наполнить array $colores_aleat размера N, мне приходят в голову два возможных случая:

  1. Если N <= k, тогда достаточно делать перестановку $colores и брать первых N элементы этой перестановки.
  2. Если 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);
}

Может быть это не самое работоспособное, но функционирует.

Я надеюсь, что он полезный.

12
ответ дан 01.12.2019, 08:16

Ты определяешь договоренность цветов вместо переменных независимого способа, и используешь mГ©todo shuffle, чтобы изменять ее posiciГіn тех же самых, потом с array_shift() ты перемещаешь то, что уже ты не используешь, следующего способа:

<?php
$colores = ["#4285f4", "#34a853", "#fbbc05","#ea4335"];
shuffle($colores);

$i = 0;
$tot = count($colores);

while($i < $tot){
  echo array_shift($colores);
  $i++;
}
10
ответ дан 01.12.2019, 08:16
  • 1
    ты должен показывать, что post - перевод, если он принадлежит другому сайту stack exchange. – rnrneverdies 08.12.2015, 01:06
  • 2
    сейчас, когда ты это говоришь, он дает случайность, которая c и # 243; я говорю о лучшем ответе ссылки, что он почти, пойдите и # 233; ntico в м и # 237; или jeje, но не был этим мой intenci и # 243; n, действительно я не в пользу переводов. – Juan Ruiz de Castilla 08.12.2015, 01:09
  • 3
    @JuanRuizdeCastilla одна согрешила и # 241; в correcci и # 243; n. Прекращаться и # 237; в этот 4 hardcodeado и pondr и # 237; в один count($colores) и выбирать и # 237; за одним for вместо одного while. – drielnox 09.12.2015, 15:32
  • 4
    хорошо, но это не correcci и # 243; n, так как исправления применяются только к ошибкам, быть и # 237; в optimizaci и # 243; n, это count est и # 225; хороший, другой (while-for) для этого согрешил и # 241; или я не вижу пример большое изменение, равный давайте не будем терять фокус, который состоит в том, чтобы отвечать на вопрос. – Juan Ruiz de Castilla 09.12.2015, 17:32

Теги

Похожие вопросы