Valeur de variable aléatoire selon intervalle de temps

Petit nouveau ! | 2 Messages

31 oct. 2014, 04:21

Bonsoir,

Voilà je créé un site sur lequel on trouve plusieurs phrases de type "Aujourd'hui, Toto est [variable]". Evidemment, vous devinez que à la place de [variable] se trouvera un adjectif choisit aléatoirement dans une liste et que cet adjectif changera toutes les 24h à 00:00. Pour ce faire j'ai créé, non pas une base de donnée, mais un tableau php dans lequel on retrouve différents adjectifs. J'ai réussi à faire en sorte que le [variable] prenne bien un adjectif aléatoire dans le tableau, mais cet adjectif re-change à chaque rafraîchissement de page. Comment faire pour qu'il ne change que toute les 24h ? Je galère vraiment, merci de votre aide ! Voilà le code pour que l'adjectif change à chaque rafraîchissement.

<html>
<head>
</head>

<body>
<?php

$toto_adj = array ('gentil', 'petit', 'bleu', 'penseur', 'affamé');
echo "<p>Aujourd'hui, toto est " . $toto_adj[rand(0, 4)] . " !</p>";

?>
</body>

</html>

Merci.

Nestecha
Invité n'ayant pas de compte PHPfrance

31 oct. 2014, 07:18

Peut être un peu complexe, y'a sûrement une méthode plus simple, si quelqu'un peut la poster ce serait cool !
echo time();

$toto_adj = array ('gentil', 'petit', 'bleu', 'penseur', 'affame');
$iCount = 86400;
$iTime = 1414730830; // Le nombre de secondes que j'ai choisi comme "base de départ".
$iDiffTime = time() - $iTime; // La différence de secondes entre les deux
$iFloorTime = floor($iDiffTime / $iCount); // On arrondit au plus bas
$iWordPos = $iFloorTime % (count($toto_adj));

echo '<br/>';

echo $toto_adj[$iWordPos];
[php]

Je m'explique sur le code.

Le time(); c'est le nombre de secondes qui nous séparent d'une date précise. Ca signifie que ce nombre augmente toujours, mais qu'il est le même pour tous, tout le temps.

Le $iWordPos va regarder combien il nous restera quand on divisera la différence de temps par le nombre de mots. Quand on aura un reste de 0, on aura le mot 0, quand on aura un reste de 1 (24h plus tard), le mot 1, et ainsi de suite. Après 5, il aura de nouveau un reste de 0.

J'ai seulement testé avec 20 secondes et ça fonctionne. Pas sûr que ça fonctionne avec 24h, mais tu peux tout à fait essayer, et ça donne un bon point de départ pour tes recherches si ça ne fonctionne pas :)

Petit nouveau ! | 2 Messages

31 oct. 2014, 14:05

Salut ! Merci de ta réponse, en effet j'avais déjà pensé au référentiel de temps ! Mais étant tout a fait débutant en php, je ne voyais pas comment le mettre en oeuvre.. Mais là, oui ça e fais une sacré piste ;) En revanche, si je ne dis pas de bêtise, il me semble que dans le code que tu m'as donné, les adjectifs vont changer dans l'ordre, non ? Il faudrait qu'il changent aléatoirement.. Mais sinon, j'ai testé le code et c'est exactement ce qu'il me faut ! Mais en aléatoire.. Je vais creusé de mon côté pour trouver comment faire, si tu as une piste, préviens moi ;) Merci !

ViPHP
xTG
ViPHP | 7331 Messages

31 oct. 2014, 14:16

Le principe reste le même dans ce cas, il te faut une différence d'heure :
$iDiffTime = time() - $iTime; // La différence de secondes entre les deux
Si cette différence est inférieure à un changement tu gardes la valeur du précédent adjectif.
Si cette différence est supérieure tu fais appel à mt_rand pour en sélectionner un autre. :)

Après il te faut stocker cette valeur : fichier, base de données, ect...