Une variable variable en php!
Résolu/Fermé
dwighthaul
Messages postés
11
Date d'inscription
dimanche 9 août 2015
Statut
Membre
Dernière intervention
14 août 2015
-
12 août 2015 à 15:32
CptRomaiin Messages postés 315 Date d'inscription mercredi 23 octobre 2013 Statut Membre Dernière intervention 28 avril 2016 - 14 août 2015 à 13:46
CptRomaiin Messages postés 315 Date d'inscription mercredi 23 octobre 2013 Statut Membre Dernière intervention 28 avril 2016 - 14 août 2015 à 13:46
A voir également:
- Une variable variable en php!
- Easy php - Télécharger - Divers Web & Internet
- Variable objet ou variable de bloc with non définie - Forum VB / VBA
- Impossible de créer le fichier de travail. vérifiez la variable d'environnement temp ✓ - Forum Word
- Msgbox vba variable ✓ - Forum VB / VBA
4 réponses
VanDog
Messages postés
63
Date d'inscription
vendredi 17 juillet 2015
Statut
Membre
Dernière intervention
11 février 2016
13
12 août 2015 à 15:54
12 août 2015 à 15:54
Bonjour,
Étant très débutant dans ce langage je ne te promet rien quant à ma solution; mais ce que tu sembles vouloir faire ressemble drôlement à un tableau avec $i comme index. As-tu essayé ainsi ?
Étant très débutant dans ce langage je ne te promet rien quant à ma solution; mais ce que tu sembles vouloir faire ressemble drôlement à un tableau avec $i comme index. As-tu essayé ainsi ?
Utilisateur anonyme
12 août 2015 à 15:54
12 août 2015 à 15:54
salut ,
Il faut simplement que tu crees les objet. Les objets parents qui contiendront un tableau d'enfants. Par exemple ton objet "album" aura un parametre qui correspondra a un tableau d'objet "musique".
Sinon tu peux aussi faire un simple tableau à n dimension.
L avantage de la classe sera d'avoir un nommage (par exemple avoir une variable "titre", ca donne plus de lisibilité).
Un petit tour ici t'aidera :
http://php.net/manual/fr/keyword.class.php
naga
Il faut simplement que tu crees les objet. Les objets parents qui contiendront un tableau d'enfants. Par exemple ton objet "album" aura un parametre qui correspondra a un tableau d'objet "musique".
Sinon tu peux aussi faire un simple tableau à n dimension.
L avantage de la classe sera d'avoir un nommage (par exemple avoir une variable "titre", ca donne plus de lisibilité).
Un petit tour ici t'aidera :
http://php.net/manual/fr/keyword.class.php
naga
dwighthaul
Messages postés
11
Date d'inscription
dimanche 9 août 2015
Statut
Membre
Dernière intervention
14 août 2015
12 août 2015 à 17:33
12 août 2015 à 17:33
Ah oui! passer par des class, pas bête ça! J'y avais pas pensé. Et sais tu si on peut définir si c'est un dossier ou un fichier de type audio/mp3 directement sans passer par une variable?
Sinon j'ai fait un peu de java, il me semble que ça s'en ressemble!
Sinon j'ai fait un peu de java, il me semble que ça s'en ressemble!
dwighthaul
Messages postés
11
Date d'inscription
dimanche 9 août 2015
Statut
Membre
Dernière intervention
14 août 2015
Modifié par dwighthaul le 14/08/2015 à 09:49
Modifié par dwighthaul le 14/08/2015 à 09:49
Ok, merci pour la fonction is_dir, ça va bien me servir!
Par contre ça ne change pas mon problème de récursivité :/
si j'instancie un objet Dossier, et que j'appelle sa méthode afficher_dossier();
Avec un truc comme ça:
dossier = new Dossier();
dossier->afficher_dossier()
{
for($i=2; $i<=count($this); $i++)
if (is_dir($this[$i])
{
dossier2 = new Dossier();
dossier2->afficher_dossier()
}else{
// Programmation normal pour une musique
}
}
Si le 'dossier2' possède des dossiers lui aussi, alors il va demander d'instancier un nouveau dossier, 'dossier2'!
J'ai pas essayé mais je pense que ca va pas le faire!
Après j'ai réussi à faire une lecture sur 3 niveaux de dossier (dossier musique, dossier artiste, dossier album), mais bon à la main c'est pas très propre, j'aurais préférer du récursif, mais je suis bloqué par les noms :/
Par contre ça ne change pas mon problème de récursivité :/
si j'instancie un objet Dossier, et que j'appelle sa méthode afficher_dossier();
Avec un truc comme ça:
dossier = new Dossier();
dossier->afficher_dossier()
{
for($i=2; $i<=count($this); $i++)
if (is_dir($this[$i])
{
dossier2 = new Dossier();
dossier2->afficher_dossier()
}else{
// Programmation normal pour une musique
}
}
Si le 'dossier2' possède des dossiers lui aussi, alors il va demander d'instancier un nouveau dossier, 'dossier2'!
J'ai pas essayé mais je pense que ca va pas le faire!
Après j'ai réussi à faire une lecture sur 3 niveaux de dossier (dossier musique, dossier artiste, dossier album), mais bon à la main c'est pas très propre, j'aurais préférer du récursif, mais je suis bloqué par les noms :/
Salut ,
A mon avis il te manques quelques notions en objet.... Alors pour commencer une chose importante dans ton cas : le nom en lui même ne pause pas de problème entre un objet et ses sous objets; c'est à dire qui objet A pourra contenir un autre objet nommé A, accessible par A->A. (c'est pas super claire mais l idée étant que ton problème n en est pas un).
Ensuite un objet peut contenir un objet du même type (c'est a dire que si tu as une classe Repertoire , elle peut contenir un parametre Repertoire)
Je te conseil de te documenter un peu plus sur les listes chainées et les objets. Si j ai le temps je ferai un exemple mais ne compte pas trop dessus .
naga
A mon avis il te manques quelques notions en objet.... Alors pour commencer une chose importante dans ton cas : le nom en lui même ne pause pas de problème entre un objet et ses sous objets; c'est à dire qui objet A pourra contenir un autre objet nommé A, accessible par A->A. (c'est pas super claire mais l idée étant que ton problème n en est pas un).
Ensuite un objet peut contenir un objet du même type (c'est a dire que si tu as une classe Repertoire , elle peut contenir un parametre Repertoire)
Je te conseil de te documenter un peu plus sur les listes chainées et les objets. Si j ai le temps je ferai un exemple mais ne compte pas trop dessus .
naga
voila un test qui pourra t aider :
naga
class test{
var $sNom_ensemble = ""; //--correspond au nom courrant de cet objet
var $sous_Ensembles = array();//--ses sous ensembles
//--dim array est un tableau à n dimension.
function traiter( $Dim_array )
{
if(is_array($Dim_array))
{
foreach($Dim_array as $v)
{
$tmp = new test();
$tmp->traiter($v);
array_push($this->sous_Ensembles,$tmp);
}
}
else
{
$this->sNom_ensemble = $Dim_array;
}
}
}
$t1 = array("a", "b");
array_push($t1, "c", "d");
$t2 = array("e", "f");
array_push($t2, "g", "h");
$t3 = array("i", "j");
array_push($t3, "k", "l");
$t4 = array($t1,$t2);
$ArrayTest = array($t3,$t4);
$Letest = new test();
$Letest->sNom_ensemble = "ensemble de base";
$Letest->traiter($ArrayTest);
var_dump($Letest);
naga
CptRomaiin
Messages postés
315
Date d'inscription
mercredi 23 octobre 2013
Statut
Membre
Dernière intervention
28 avril 2016
58
14 août 2015 à 11:50
14 août 2015 à 11:50
Salut,
Alors pour information ce que tu voulais faire au départ, si j'ai bien compris, existe en PHP. Il est possible de créer une variable avec un nom dynamique de cette manière :
Cependant je te conseil plutôt d'utiliser des tableaux et/ou des objets pour effectuer ce genre de chose comme ça t'a été indiqué plus haut. Avec des variables ayants des noms dynamiques le code devient très vite lourd et illisible.
Alors pour information ce que tu voulais faire au départ, si j'ai bien compris, existe en PHP. Il est possible de créer une variable avec un nom dynamique de cette manière :
$i = 5; ${"test".$i} = "Test"; // Création d'une variable nommée $test5 echo $test5; // Appel de la variable
Cependant je te conseil plutôt d'utiliser des tableaux et/ou des objets pour effectuer ce genre de chose comme ça t'a été indiqué plus haut. Avec des variables ayants des noms dynamiques le code devient très vite lourd et illisible.
CptRomaiin
Messages postés
315
Date d'inscription
mercredi 23 octobre 2013
Statut
Membre
Dernière intervention
28 avril 2016
58
14 août 2015 à 12:35
14 août 2015 à 12:35
Effectivement ce n'est pas très utile mais comme il a posé la question dans son premier post j'y répond, ça peut servir à d'autres ;)
ah oui en effet ^^ je ne l avais pas "noté" car l'utilisation d un tableau est largement suffisant (il se compliquera le tout avec des indirections) ... en fait de manière generale je ne les utilises que pour ce qui concerne l'ihm, dans le cas de variables je trouve que ca n a pas vraiment d interêt (ou en tout cas je ne vois pas ... sauf pour des appels de dll externe peu être mais jamais fais en php =P)
CptRomaiin
Messages postés
315
Date d'inscription
mercredi 23 octobre 2013
Statut
Membre
Dernière intervention
28 avril 2016
58
14 août 2015 à 13:46
14 août 2015 à 13:46
Oui je suis d'accord avec toi, moi je ne les utilises pas du tout, il y toujours (ou presque ^^) un moyen de faire autrement :-)
dwighthaul
Messages postés
11
Date d'inscription
dimanche 9 août 2015
Statut
Membre
Dernière intervention
14 août 2015
Modifié par dwighthaul le 12/08/2015 à 15:50
Modifié par dwighthaul le 12/08/2015 à 15:50
<?php
if(isset($_GET['musique_name']))
{
$musique_name=trim($_GET['musique_name']);
?>
<audio type="audio/mp3" src="musiques/<?php echo $musique_name ?>" autoplay controls></audio>
<?php
}
function musique($scan)
{
for($i=2; $i<=count($scan); $i++)
{
if(!empty($scan[$i]))
{
$bool =stristr($scan[$i],'.mp3');
if ($bool=='.mp3')/*Donc c'est une musique, on affiche le fichier de lecture, peperre!*/
{
echo $scan[$i];
?>
<form action="test2.php" method="GET">
<input type="hidden" name="musique_name" value="<?php echo 'musiques/'.$scan[$i]; ?>">
<input type="submit" value="Lire">
</form>
<?php
}else{
echo '<fieldset>';
echo '<legend>'.$scan[$i].'</legend>';
$scan2 = scandir('musiques/'.$scan[$i]);
musique($scan2);
echo "<br/></fieldset>";
}
}
}
}
$scan = scandir("musiques");
musique($scan);
?>
voila mon php si c'est plus clair!
if(isset($_GET['musique_name']))
{
$musique_name=trim($_GET['musique_name']);
?>
<audio type="audio/mp3" src="musiques/<?php echo $musique_name ?>" autoplay controls></audio>
<?php
}
function musique($scan)
{
for($i=2; $i<=count($scan); $i++)
{
if(!empty($scan[$i]))
{
$bool =stristr($scan[$i],'.mp3');
if ($bool=='.mp3')/*Donc c'est une musique, on affiche le fichier de lecture, peperre!*/
{
echo $scan[$i];
?>
<form action="test2.php" method="GET">
<input type="hidden" name="musique_name" value="<?php echo 'musiques/'.$scan[$i]; ?>">
<input type="submit" value="Lire">
</form>
<?php
}else{
echo '<fieldset>';
echo '<legend>'.$scan[$i].'</legend>';
$scan2 = scandir('musiques/'.$scan[$i]);
musique($scan2);
echo "<br/></fieldset>";
}
}
}
}
$scan = scandir("musiques");
musique($scan);
?>
voila mon php si c'est plus clair!