Une variable variable en php!
Résolu
dwighthaul
Messages postés
11
Date d'inscription
Statut
Membre
Dernière intervention
-
CptRomaiin Messages postés 315 Date d'inscription Statut Membre Dernière intervention -
CptRomaiin Messages postés 315 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tous, je suis en train de réaliser une fonction récursive pour afficher toues les musiques d'un fichier source.
De sorte que s'il rencontre un fichier musique il affiche un formulaire pour pouvoir le lire
Si c'est un dossier il le scan et relance la fonction, scan le dossier et ainsi de suite.
Le problème que j'ai c'est dans le nommage des fonctions 'scan'.
En gros j'aimerais bien avoir une variable de basse qui s'appelle scan pour le fichier mère(dossier musique),
scan1 pour un fichier fille du fichier mère (dossier artiste)
scan2 pour le fichier fille du fichier fille du fichier mère, et ainsi de suite (dossier album par exemple)...
et tout ça automatiquement dans une boucle récursive.
Faire une sorte de $variable = $scan.'$i';
Si quelqu'un à une idée pour faire ca, je suis preneur!
De sorte que s'il rencontre un fichier musique il affiche un formulaire pour pouvoir le lire
Si c'est un dossier il le scan et relance la fonction, scan le dossier et ainsi de suite.
Le problème que j'ai c'est dans le nommage des fonctions 'scan'.
En gros j'aimerais bien avoir une variable de basse qui s'appelle scan pour le fichier mère(dossier musique),
scan1 pour un fichier fille du fichier mère (dossier artiste)
scan2 pour le fichier fille du fichier fille du fichier mère, et ainsi de suite (dossier album par exemple)...
et tout ça automatiquement dans une boucle récursive.
Faire une sorte de $variable = $scan.'$i';
Si quelqu'un à une idée pour faire ca, je suis preneur!
A voir également:
- Une variable variable en php!
- Easy php - Télécharger - Divers Web & Internet
- Le fichier contient un programme écrit en python. le programme construit un mot secret mais il ne l'affiche pas. modifiez ce programme afin que à chaque itération de la boucle : la variable a augmente de 2 la variable b diminue de 1 ajoutez une instruction pour faire afficher le mot secret construit. quel est ce mot secret ? ✓ - Forum Python
- Vba range avec variable ✓ - Forum VB / VBA
- Variable d'environnement temp ✓ - Forum Microsoft Office
- Variable objet ou variable de bloc with non définie - Forum VB / VBA
4 réponses
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 ?
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
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
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.
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)
<?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!