Page 1 sur 1

afficher aleatoirement un tableau

Posté : 12 juil. 2006, 12:58
par agité
Bonjour,

j'ai un tableau :
$sql = "SELECT * FROM `mix` WHERE lien LIKE '%'";
$query = mysql_query($sql) or die ('erreur '.mysql_error());
$array = mysql_fetch_array($query);
qui me donne des lien en :
$array['lien'];
donc la j'ai mon tableau avec tout les elements de la base de donnée je fais donc :
while(($array = mysql_fetch_array($query)) != false)
	{
		 echo $array['lien']."<br>";

	}
pour afficher tout les elements les un a la suite des autres, maintenant j'aimerais qu'il s'affiche en random, pour faire une playlist aleatoire.

On me conseille plusieurs commane comme : array_rand() ou array_push() mais pour ca il faudrait trouver le nombre d'elements dans le tableau et un :
 count($array['lien']) 
me retourne toujours : 1

Donc :

Comment faire pour compter le nombre d'elements du tableau ?
Est ce que les fonctions sont les bonne a utiliser ?

Et bien sur si vous avez d'autre maniere de voir le code je serais ravi de voir ce que vous pouvez me proposer ;)

Agité.

Posté : 12 juil. 2006, 13:23
par Ryle
Tu pourrais faire un mysql_numrows($query) pour savoir combien d'enregistement ont été retournés.

Cela dit, si tu utilises mysql, il existe une fonction ORDER BY RAND() qui te retournera les résultat de la base ordonné aléatoirement sans que tu ais besoin de te soucier de les récuperer dans un tableau et de les désorganiser ;)

Par ailleurs le "WHERE lien LIKE '%'" dans ta requête ne sert à rien, si tu veux tous les résultats, ne mets pas de where ;) (et préfère le nom des champs à un "SELECT *")

Posté : 12 juil. 2006, 13:41
par agité
ok ca me retourne bien le nombre d'enregistrement sur la table maintenant je fais ca :
while(($array = mysql_fetch_array($query)) != false)
	{
	   	 $tableau = array();
		 $push = array_push($tableau,$array['lien']);
		 $compter = mysql_num_rows($query);
		 $rand = array_rand($push,$compter);
		 echo $rand."<br>";

	}
pour qu'il me fasse un tableau aleatoire, mais il me retourne toujours :

Code : Tout sélectionner

Warning: array_rand(): First argument has to be an array in /home/agite/domains/electrogene.org/public_html/allpls.php on line 20

Posté : 12 juil. 2006, 14:34
par ouckileou
Sinon il y a ça : shuffle()

Posté : 12 juil. 2006, 14:40
par agité
while(($array = mysql_fetch_array($query)) != false)
	{
	   	 $tableau = array();
		 $push = array_push($tableau,$array['lien']);
		 $compter = mysql_num_rows($query);
		 $rand = shuffle($push);
		 echo $rand."<br>";

	}
shuffle me retourne l'erreur :

Code : Tout sélectionner

Warning: shuffle() expects parameter 1 to be array, integer given in /home/agite/domains/electrogene.org/public_html/allpls.php on line 19
comme s'il ne voyait pas le tableau non ?

Posté : 12 juil. 2006, 14:42
par ouckileou
Non c'est normal, regarde ce que renvoie array_push()

Mais du coup tu peux appliquer cette fonction directement sur le tableau renvoyé par mysql_fetch_array() , plus besoin des array_push() et compagnie

Posté : 12 juil. 2006, 14:47
par agité
ok donc en faisant :
while(($array = mysql_fetch_array($query)) != false)
	{
		 $rand = shuffle($array['lien']);
		 echo $rand."<br>";

	}
il devrait faire le necessaire mais il me retourne toujours cette erreur :

Code : Tout sélectionner

Warning: shuffle() expects parameter 1 to be array, string given

Posté : 12 juil. 2006, 14:52
par ouckileou
Le message d'erreur me paraît clair :

Code : Tout sélectionner

Warning: shuffle() expects parameter 1 to be array, string given
"shuffle() attend un paramètre tableau, une chaîne a été passée"

Relis ton code et tu verras.

Tu dois :
1 - récupérer un tableau
2 - le mélanger avec shuffl()
3 - l'afficher

Pas plus compliqué que ça. Si tu ne comprends pas regarde la doc de shuffle() (ce que tu aurais déjà dû faire)

Posté : 12 juil. 2006, 14:58
par agité
Pourtant il me semble qu'avec :
while(($array = mysql_fetch_array($query)) != false)
	{
		 $tableau = array($array['lien']);
		 $rand = shuffle($tableau);
		 echo $rand."<br>";

	}
je recupere bien un tableau
ensuite je le shuffle()
ensuite je l'affiche

Le code n'est pas bon quelque pars ?

Posté : 12 juil. 2006, 15:08
par ouckileou
$tableau = array($array['lien']); 
Avec cette ligne tu recrées un tableau avec la valeur courante de 'lien', ce n'est pas très logique.

J'ai pas tout suivi mais je vois qqchose comme ça :
while ($array = mysql_fetch_array($query)) {
   $tabLiens[] = $array['lien']; // tu ajoutes chaque lien dans un nouveau tableau
}
echo '<pre>';
echo '<b>Avant</b>';
print_r($tabLiens);

// you wash it, you wash it
$rand = shuffle($tabLiens);

if ($rand) { echo 'Mélange réussi'; } else { echo 'Mélange échoué'; }

// le nouveau tableau mélangé
echo '<b>Après</b>';
print_r($tabLiens);
echo '</pre>';

Posté : 12 juil. 2006, 15:08
par Ryle
Mais du coup tu peux appliquer cette fonction directement sur le tableau renvoyé par mysql_fetch_array()
Objection votre honneur... mon client ne veut pas mélanger les données de chaque ligne retournée par sa requête, il veut mélanger l'ordre des lignes retournées par se requête ;)

ce qu'il te faut c'est faire un tableau contenant chacune des lignes retournée par le mysql_fetch*, sortir du while et shuffler tout ça après. Et ensuite, reparcourir le tableau shufflisé pour les afficher dans le désordre :)

et d'où ma suggestion du "order by rand()" que tu te posais pas de question a pusher ou shuffler...

Posté : 12 juil. 2006, 15:10
par ouckileou
Mais du coup tu peux appliquer cette fonction directement sur le tableau renvoyé par mysql_fetch_array()
Objection votre honneur... mon client ne veut pas mélanger les données de chaque ligne retournée par sa requête, il veut mélanger l'ordre des lignes retournées par se requête ;)
Ouais je me suis planté... :oops:

Et le ORDER BY RAND oui c'est cool comme solution. Même si j'avais vu que c'était pas toujours super rand :lol:

Posté : 12 juil. 2006, 15:16
par agité
ah oui c'est vrai qu'avec un ORDER BY RAND c'est radical :
<?php

session_start();

require("connect.php");

$sql = "SELECT lien FROM `mix` ORDER BY RAND()";
$query = mysql_query($sql) or die ('erreur '.mysql_error());
$array = mysql_fetch_array($query);




while(($array = mysql_fetch_array($query)) != false)
	{
		 echo $array['lien']."<br>";

	}

?>
ca marche parfaitement merci beaucoup :)

je met le [Resolu]