Este es mi código a continuación. El código en sí hace eco si la suma de tres números aleatorios es igual a 100. Por ahora, para obtener un resultado de 100 como $valuestotal , tengo que recargar mucho la página. Pero quiero obtener el resultado de 100 como $valuestotal cada vez que recargo la página. ¿Cómo puedo hacer esto?
Pensé que sería posible con un bucle en bucle. Pero da el mismo resultado x veces. Quiero que PHP siga probando diferentes valores aleatorios, y cuando alcance el valor de 100 como $valuestotal , debería hacer eco de $valuestotal ...
Lo que realmente quiero es, por ejemplo, quiero que tres números aleatorios obtengan un total de 100, por ejemplo, 35, 25 y 50. O 25, 15 y 60... y la lista continúa...
¿Cómo es esto posible?
$values = rand(1, 100); $values2 = rand(1, 100); $values3 = rand(1, 100); $valuestotal = $values + $values2 + $values3; // while ($valuestotal === 100) { echo $values; echo '<br>'; echo $values2; echo '<br>'; echo $values3; echo "<br>"; echo $valuestotal; }Otro posible enfoque. El código es un poco más complejo que algunas de las otras respuestas, pero quería agregar una forma que solo necesitaría repetir una vez.
$target = 100; $n = 3; while ($n) { if (1 < $n--) { $addend = rand(0, $target - ($n - 1)); $target -= $addend; $addends[] = $addend; } else { $addends[] = $target; } } var_dump($addends); Básicamente, resta un número aleatorio entre 0 y el resto de la resta anterior n veces hasta que solo queda una repetición, y el resto es la última pieza. $n - 1 está ahí para que no reste demasiado al azar para que quede suficiente para el resto de las repeticiones.
No necesitará hacer un bucle dentro de un bucle. Por ejemplo, podrías hacer esto:
<?php $keepChecking = true; $values = 0; $values2 = 0; $values3 = 0; $valuestotal = 0; while($keepChecking){ $values = rand(1, 100); $values2 = rand(1, 100); $values3 = rand(1, 100); $valuestotal = $values + $values2 + $values3; if ($valuestotal === 100){ $keepChecking = false; } } echo $values; echo '<br>'; echo $values2; echo '<br>'; echo $values3; echo "<br>"; echo $valuestotal; ?>Los resultados pueden ser:
2 37 61 100Puede probar aquí: http://phpfiddle.org/lite
En un bucle while , el bloque se ejecutará siempre que la condición sea verdadera. Entonces puede pensar, ¿qué tiene que ejecutar varias veces y cuándo debe detenerse?
Lo que necesita ejecutar varias veces es la recopilación de números aleatorios:
while ( ... ) { # roll dice, save numbers }Ahora, esto debería detenerse cuando la suma sea 100. La condición establecida en el bucle debe ser verdadera para que se ejecute varias veces, por lo que, en este sentido, tiene que ejecutarse mientras la suma no sea 100. Aquí hay un punto clave que se invirtió. . Si su condición es falsa (por casualidad probablemente será después de la primera ejecución), entonces el ciclo ya se detuvo. Tienes que correr mientras la suma no es 100 para que cuando lo sea, ya no acumule números aleatorios. Luego procedes a repetirlos.
$valuestotal = 0; while ($valuestotal != 100) { $value1 = rand(1, 100); $value2 = rand(1, 100); $value3 = rand(1, 100); $valuestotal = $value1 + $value2 + $value3; } echo "$value1<br>$value2<br>$value3<br>$valuestotal"; Como una sintaxis alternativa, puede almacenar los valores en una matriz y usar la función array_sum() :
$numbers = []; while (array_sum($numbers) != 100) $numbers = [ rand(1, 100), rand(1, 100), rand(1, 100), ]; echo join(' + ', $numbers), ' = ', array_sum($numbers);