renommer un tableau array

clicaucentre
Invité n'ayant pas de compte PHPfrance

17 déc. 2011, 13:42

Bonjour à tous

Voici mon probleme:
j'ai plusieurs tableaux sur le même modèle comme celui-ci:

Code : Tout sélectionner

$tbl165 = array(40, 60, 90, 120, 150, 165);
et j'aurai besoin de changer son nom de variable, en faisant ceci:

Code : Tout sélectionner

if ($largeur > 164) { $tblutil = $tbl165; }
puis j'utilise le tableau de cette manière:

Code : Tout sélectionner

for ($n = 1; $n <= count($tblutil); $n++) { $ligne = each($tblutil); echo "<div> <table class=\"largeur\"><tr> <td width=\"$ligne[value]\">$ligne[value]<input type=\"radio\" name=\"largeur\" value=\"$ligne[value]\"></td> </tr></table> </div>"; }
et voici le message d'erreur que j'obtiens:
Warning: Variable passed to each() is not an array or object in C:\wamp\www\granval\misajour\outilsimages\form_largeur.php on line 9

Si je place : $tbl165 dans ma boucle ça marche trés bien,
si vous pouviez me dire ce que ne fais pas comme il faut, Merci d'avance

ViPHP
ViPHP | 2287 Messages

17 déc. 2011, 14:21

et voici le message d'erreur que j'obtiens:
Warning: Variable passed to each() is not an array or object in C:\wamp\www\granval\misajour\outilsimages\form_largeur.php on line 9

Si je place : $tbl165 dans ma boucle ça marche trés bien,
si vous pouviez me dire ce que ne fais pas comme il faut, Merci d'avance
Bonjour,

Ça semble correct mais tu n'as pas pensé, dans le cadre du déboguage, à vérifier ce qu'il y avait dans la variable $tblutil quand tu reçois ce message d'erreur.

Par exemple dans ce bout de code :
if ($largeur > 164) 
{ $tblutil = $tbl165;
}
Que se passe t-il si la condition n'est pas vérifiée ? $tblutil est indéfini et le code suivant va échouer avec une erreur puisqu'il s'attend à ce qu'un tableau soit contenu dans la variable (via each() ).

Donc, si tu penses à préfixer ton code d'une simple initialisation de la variable qui pose problème (qui couvre donc tous les cas de figure, y compris si les conditions échouent), ça peut aider :
$tblutil=array();

if ($largeur > 164) 
{ $tblutil = $tbl165;
}
Essaye et dis-nous.
if(!@work()){ Nespresso(); } else { what(); }
______________________________

clicaucentre
Invité n'ayant pas de compte PHPfrance

17 déc. 2011, 14:40

Merci j'ai essayé comme ça:

Code : Tout sélectionner

$tblutil=array(); for ($n = 1; $n <= count($tblutil); $n++) { $ligne = each($tblutil); echo "<div> <table class=\"largeur\"><tr> <td width=\"$ligne[value]\">$ligne[value]<input type=\"radio\" name=\"largeur\" value=\"$ligne[value]\"></td> </tr></table> </div>"; }
Je n'ai plus de message d'erreur mais aucun affichage de la boucle!!

ViPHP
ViPHP | 2287 Messages

17 déc. 2011, 15:08

Je n'ai plus de message d'erreur mais aucun affichage de la boucle!!
Oui car du coup la variable est initialisée avec un tableau vide...

A toi de revoir tes conditions (cf code donné au départ), de vérifier qu'elles sont bien éxécutées comme elles le devraient (au besoin en insérant des echo dans chaque if() pour bien visualiser), et tu devrais finir par y arriver.
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Mammouth du PHP | 2278 Messages

17 déc. 2011, 16:06

Suggestion
$tbl165 = array(40, 60, 90, 120, 150, 165);

/* une option en initialisant $tblutil 
$tblutil = array(); 
if ($largeur > 164) 
{
    $tblutil = $tbl165;
}
else
{
    $tblutil = ....; 
}
*/
/* une option en assignant un taleau vide en-dessous de 164  Il suffit de remplacer array() par le nom de tableau voulu*/
$tblutil = ($largeur > 164) ? $tbl165: array() ;
for ($n = 1; $n <= count($tblutil); $n++)
{ $ligne = each($tblutil);
echo "<div>
<table class=\"largeur\"><tr>
<td width=\"$ligne[value]\">$ligne[value]<input type=\"radio\" name=\"largeur\" value=\"$ligne[value]\"></td>
</tr></table>
</div>";
}
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

clicaucentre
Invité n'ayant pas de compte PHPfrance

17 déc. 2011, 18:00

Merci :-)

La première option a fonctionné !

Si je comprend bien il suffisait de dire que $tblutil est un tableau avant de s'en servir

Mammouth du PHP | 2278 Messages

17 déc. 2011, 22:28

Ce n'est pas certain quand on a la certitude qu'il sera rempli comme tableau. de plus, venant de pascal et de C, j'ai l'habitude de tout déclarer avant de m'en servir, même si ce n'est pas indispensable en PHP.
en effet:
if ($a=1)
{
$tableau = $tableau1;
}
else
{
$tableau = $tableau2;
}
fonctionne toujours si $tableau1 et $tableau2 existent comme tableaux.
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphanteau du PHP | 49 Messages

18 déc. 2011, 14:16

Salut,
Juste par curiosité, pourquoi tu ne crées pas un tableau multidimensionnel?

$tblutil['165'] = array(40, 60, 90, 120, 150, 165);
$tblutil['166'] = array(40, 60, 90, 120, 150, 165);
etc...

Jérôme