[PHP]Sorte de fonction Random

Statut
N'est pas ouverte pour d'autres réponses.

MbK_

Etudjant
Slt a tous,

j'aimerais que PHP choisisse tout seul une certaine phrase dans une sorte de base de donnée avec plusieurs phrases.

Je m'explique : je voudrait avoir un code qui ressemble a ca

Code:
if($test['places_assises']=="on"){
        echo ("Choisir une phrase parmis 5 ou 6 phrases AU HASARD");
}

j'ai ete voir sur la fonction random mais elle ne s'adresse qu'au chiffre. Si il n'y a aucun autre moyen, je m'arrangerai avec cette fonction.

Merci a tous ;)

(je reviens ce soir pour voir les reply donc si je rpd pas, dsl ^^)
 

null

ose();
Moi je peux te donner deux solutions mais basées sur le même principe :

1ere

Tu rajoutes un champ auto-incrementé dans ta table (comme ça chaque phrase à son ID).

Ensuite tu utilises la function rand en mettant comme maximum le nombre de phrases dans la base (mysql_num_rows(mysql_query("SELECT * FROM table)))

2eme

Tu charhes tout la table dans un tableau PHP et après tu utilises la function rand pour générer des "clés" du tableau.
 
1er
OP
MbK_

MbK_

Etudjant
heuu pour finir je me dis que ne pas utiliser la BDD c'est plus simple. si je fais un tableau mais qui restera tjs le même en PHP dans un petit script et que j'utilise sa fonction rand c'est bon aussi?

Cmt je pourrai faire?

Code:
<?
$phrases = array ("phrase1", "phrase2", "phrase3", "phrase4", "phrase5");


$chiffre=rand(0, 4);

echo ("$phrases['".$chiffre."']");
?>
Ainsi?
 
1er
OP
MbK_

MbK_

Etudjant
bon j'ai fais une petite fonction mais elle ne fonctionne pas.

Code:
function places_assises_dispo(){
	$phrases = array 
                          (
		"test1!",
		"test2.",
		"test3"
                          );
	$chiffre=rand(0, 2); 
	echo ($phrases['$chiffre']);
	}
et je l'appelle comme ceci

Code:
<? echo (places_assises_dispo()); ?>
<? echo places_assises_dispo(); ?>
<? places_assises_dispo(); ?>
aucune ne fonctionne.

une idée?
 

null

ose();
Je t'ai refais le code à ma manière et décliner en plusieurs façons car je sais pas si tu devais avoir en fonction ou pas :

1ere

Un bête echo de à l'appel du script

Code:
<?php
$phrases = array("test1!", "test2.", "test3");

$phrase = $phrases[rand(0, count($phrases)-1)];

echo $phrase;
?>
2eme

Via une fonction avec le tableau hors de la fonction (appel via GLOBAL) et affichage direct par echo

Code:
<?php
$phrases = array("test1!", "test2.", "test3");

function places_assises_dispo()
{
   GLOBAL $phrases;
   
   $phrase = $phrases[rand(0, count($phrases)-1)];

   echo $phrase;
}

places_assises_dispo();
?>
3eme

Via une fonction avec le tableau hors de la fonction (appel via GLOBAL) et renvoit du résultat

Code:
<?php
$phrases = array("test1!", "test2.", "test3");

function places_assises_dispo()
{
   GLOBAL $phrases;
   
   $phrase = $phrases[rand(0, count($phrases)-1)];

   return $phrase;
}

$phrase = places_assises_dispo();
echo $phrase;
// ou
echo places_assises_dispo();
?>
Tu auras remarquer que je pour donner le maximum de la fonction "rand()", je compte le nombre d'entrées dans le tableau et je soustrais 1 (ça comment bien à 0 comme tu l'avais mis). C'est plus facile, tu peux rajouter des phrases sans changer le chiffre.
 
1er
OP
MbK_

MbK_

Etudjant
tout ca fonctionne parfaitement!

mais j'ai 2 petites questions (histoire d'apprendre qd mm un peu :) )

:arrow: Pq le tableau se trouve à l'extérieur de la fonction?

:arrow: à quoi sert le GLOBAL?


un grand merci à toi pck ca marche NIKEL !
 

null

ose();
Tu peux le mettre à l'intérieur mais c'est pour si jamais tu faisais une include ou quelque chose du genre.

L'appel GLOBAL permet de prendre des variables hors de la fonction (donc du script) sans les passer en paramètres (via la parenthèse) :

Pas

Code:
<?php
$temps = "beau";

function le_temps($temps)
{
     echo "Il fait ".$temps;
}
mais ça

Code:
<?php
$temps = "beau";

function le_temps()
{
     GLOBAL $temps;

     echo "Il fait ".$temps;
}
 

Carambar

Elite
Code:
$i=rand (0, 5);

switch ($i) {
case 0:
   echo "phrase 1";
   break;
case 1:
   echo "phrase 2";
   break;
case 2:
   echo "phrase 3";
   break;
case 3:
   echo "phrase 4";
   break;
case 4:
   echo "phrase 5";
   break;
case 5:
   echo "phrase 6";
   break;
}
Pour transformer ca en fonction, utilise un return.
 
1er
OP
MbK_

MbK_

Etudjant
donc si je met l'array a l'interrieur de la fonction, il ne faudra pas de GLOBAL si j'ai bien compris.

Merci en tout cas ;)
 

null

ose();
MbK_ a dit:
donc si je met l'array a l'interrieur de la fonction, il ne faudra pas de GLOBAL si j'ai bien compris.

Merci en tout cas ;)
Exact
 
1er
OP
MbK_

MbK_

Etudjant
null a dit:
MbK_ a dit:
donc si je met l'array a l'interrieur de la fonction, il ne faudra pas de GLOBAL si j'ai bien compris.

Merci en tout cas ;)
Exact
un grand merci pour ton aide ;)

j'ai encore appris une chose :D
 
J

j0k3r_n0ir

ex membre
MbK_ a dit:
bon j'ai fais une petite fonction mais elle ne fonctionne pas.

Code:
function places_assises_dispo(){
	$phrases = array 
                          (
		"test1!",
		"test2.",
		"test3"
                          );
	$chiffre=rand(0, 2); 
	echo ($phrases['$chiffre']);
	}
et je l'appelle comme ceci

Code:
<? echo (places_assises_dispo()); ?>
<? echo places_assises_dispo(); ?>
<? places_assises_dispo(); ?>
aucune ne fonctionne.

une idée?
Pour info, ton erreur est que tu fais :
Code:
echo ($phrases['$chiffre']);
Alors que tu devrai faire :
Code:
echo ($phrases[$chiffre]);
Sans les simples quotes autour de $chiffres sinon il ne te le prends pas comme une variable mais comme une chaine de caractère.
 
Statut
N'est pas ouverte pour d'autres réponses.
Haut