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
A voir également:
- Commande each plus valide en php 8.1
- Ethernet n'a pas de configuration ip valide - Guide
- Clé windows 8.1 - Guide
- Invite de commande - Guide
- Commande terminal mac - Guide
- Easy php - Télécharger - Divers Web & Internet
7 réponses
Bonjour,
Commence par nous faire un
et montre nous ce que ça te donne.
Ensuite, explique nous ce que tu veux obtenir dans ta variable $rooms
Commence par nous faire un
var_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
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
Sinon, plus propre.. il existe la fonction array_keys
https://www.php.net/manual/fr/function.array-keys.php
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);
}
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
// 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
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
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