Commande each plus valide en php 8.1
Résolu
giludo
-
giludo -
giludo -
Bonjour,
Je n'arrive pas à transformer une commande each en foreach : le résultat est vide
commande initiale :
while (list($room_key) = each($room_hash)) $rooms[] = $room_key;
nouvelle commande :
foreach ($room_hash as $room_key) $rooms[] = $room-key;
A quoi sert le préfixe list( et comment le reconduire ?
Dans la commande initiale, le préfixe est indispensable
Merci de votre aide
giludo
Je n'arrive pas à transformer une commande each en foreach : le résultat est vide
commande initiale :
while (list($room_key) = each($room_hash)) $rooms[] = $room_key;
nouvelle commande :
foreach ($room_hash as $room_key) $rooms[] = $room-key;
A quoi sert le préfixe list( et comment le reconduire ?
Dans la commande initiale, le préfixe est indispensable
Merci de votre aide
giludo
7 réponses
-
Bonjour,
Commence par nous faire unvar_dump($room_hash);
et montre nous ce que ça te donne.
Ensuite, explique nous ce que tu veux obtenir dans ta variable $rooms
-
Bonsoir et merci,
voila ce que j'obtiens avec each :
array(3) { ["Saint Pierre"]=> int(1) ["Saint André"]=> int(1) ["Sainte Cécile"]=> int(1) }
et avec foreach :
array(3) { ["Saint Pierre"]=> int(1) ["Saint André"]=> int(1) ["Sainte Cécile"]=> int(1) }
C'est la même chose, et pourtant par la suite, j'ai le message avec le foreach : Division by zero et dans le tableau, un 1 au lieu du nom que je vous ai montré, et des cases vides au lieu des chiffres habituels
Cordialement
Giludo-
Tu n'as pas répondu à mes questions ......
Mais je suppose que ce que tu veux obtenir, c'est la liste des "clés"....
Tu pourrais, dans ton foreach faire$rooms = []; foreach($room_hash as $K => $V){ $rooms[] = $K; }
Sinon, plus propre.. il existe la fonction array_keys
https://www.php.net/manual/fr/function.array-keys.php -
voici le code servant à créer le tableau :
while (list($room_key) = each($room_hash)) $rooms[] = $room_key;
sort($rooms);
reset($name_hash);
while (list($name_key) = each($name_hash)) $names[] = $name_key;
// foreach ($name_hash as $name_key) $names[] = $name_key;
sort($names);
$n_rooms = sizeof($rooms);
$n_names = sizeof($names);
// On affiche uniquement pour une sortie HTML
if ($csv == "n")
{
if ($sumby=="1")
$premiere_cellule = "Paroisse";
else if ($sumby=="5")
$premiere_cellule = "Type";
else if ($sumby=="6")
$premiere_cellule = "Utilisateur";
else if ($sumby=="7")
$premiere_cellule = "Jour";
else if ($sumby=="8")
$premiere_cellule = "Semaine";
else if ($sumby=="9")
$premiere_cellule = "Mois";
else
$premiere_cellule = grr_sql_query1("select fieldname from grr_overload where id='$sumby'");
echo "<hr /><h1>Comptage des réservations : (nombre) heures / frais </h1><table border=2 cellspacing=4>\n";
if ($sumby=="1")
echo "<tr><td class=\"BL\" align=left><b>".$premiere_cellule." \ Mois</b></td>\n";
else
echo "<tr><td class=\"BL\" align=left><b>".$premiere_cellule." \ Salle</b></td>\n";
}
for ($c = 0; $c < $n_rooms; $c++)
{
if ($csv == "n")
echo "<td class=\"BL\" align=left><b>$rooms[$c]</b></td>\n";
else
echo "$rooms[$c]\t";
$col_count_total[$c] = 0;
$col_hours_total[$c] = 0.0;
$col_frais_total[$c] = 0;
}
if ($csv == "n")
echo "<td class=\"BR\" align=right><br><b>Total</b></td></tr>\n";
else
echo "Total\t\r\n";
$grand_count_total = 0;
$grand_hours_total = 0;
$grand_frais_total = 0;
for ($r = 0; $r < $n_names; $r++)
{
$row_count_total = 0;
$row_hours_total = 0.0;
$row_frais_total = 0;
$name = $names[$r];
if ($csv == "n")
echo "<tr><td class=\"BR\" align=right><b>$name</b></td>\n";
else
echo "$name\t";
for ($c = 0; $c < $n_rooms; $c++)
{
$room = $rooms[$c];
if (isset($count[$room][$name]))
{
$count_val = $count[$room][$name];
$hours_val = $hours[$room][$name];
$frais_val = $frais[$room][$name];
cell($count_val, $hours_val, $frais_val, $csv, $decompte);
$row_count_total += $count_val;
$row_hours_total += $hours_val;
$row_frais_total += $frais_val;
$col_count_total[$c] += $count_val;
$col_hours_total[$c] += $hours_val;
$col_frais_total[$c] += $frais_val;
} else {
if ($csv == "n")
echo "<td> </td>\n";
else
echo "\t";
}
}
cell($row_count_total, $row_hours_total, $row_frais_total, $csv, $decompte);
if ($csv == "n")
echo "</tr>\n";
else
echo "\r\n";
$grand_count_total += $row_count_total;
$grand_hours_total += $row_hours_total;
$grand_frais_total += $row_frais_total;
$grand_moyenh_total = round($row_hours_total/$row_count_total);
$grand_moyenf_total = round($row_frais_total/$row_count_total);
}
-
-
J'ai modifié les foreach de la manière suivante :
// while (list($room_key) = each($room_hash)) $rooms[] = $room_key;
foreach ($room_hash as $room_key=>$room_val) $rooms[] = $room_val;
// while (list($name_key) = each($name_hash)) $names[] = $name_key;
foreach ($name_hash as $name_key=>$name_val) $names[] = $name_val;
sans changement
giludo -
ça y est, c'est bon avec :
foreach ($room_hash as $room_key=>$room_val) $rooms[] = $room_key;
et
foreach ($name_hash as $name_key=>$name_val) $names[] = $name_key;
MERCI -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Bonsoir, j'ai un autre souci avec la ligne :
while ( list( $lib, $pos ) = each ($tab) )
Il semble que le remplacement par :
foreach ($colonnes as list($lib, $pos))
ne fonctionne pas correctement.
la commande
$texte = $tab[$lib];
provoque le message :
Clé de tableau non définie « »
description des tables :
$colonnes { ["Date et Heure"]=> int(31) ["Fin"]=> int(14) ["Réservation"]=> int(78) ["Salle"]=> int(43) ["Montant"]=> int(20) }
$tab { ["Date et Heure"]=> string(16) « 06/01/22 15:00 » ["Fin"]=> string(5) « 16:45 » ["Réservation"]=> string(1) " " ["Salle"]=> string(11) « Saint André " ["Montant"]=> string(8) « 230.00 " }
Merci de votre aide -
Merci jordan45 pour ton message, mais ce n'est pas le même cas que ma précédente demande : il s'agit de récupérer les 2 colonnes de la table, comme c'était dèjà le cas avec la commande each.
Dans la documentation, ce cas est prévu
Merci pour tes lumières
giludo
; -
Bonsoir,
Finalement, il faut appliquer la formule standard même dans ce cas.
Le problème est maintenant résolu
Cordialement
Gilles HUDAULT