Commande each plus valide en php 8.1

Résolu/Fermé
giludo - Modifié le 19 janv. 2022 à 14:12
 giludo - 26 janv. 2022 à 21:00
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
A voir également:

7 réponses

jordane45 Messages postés 38289 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 novembre 2024 4 703
Modifié le 19 janv. 2022 à 15:38
Bonjour,

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

0
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
0
jordane45 Messages postés 38289 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 novembre 2024 4 703
Modifié le 19 janv. 2022 à 18:40
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
0
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);
}
0
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
0
ç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
0

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
0
j'ai fait une petite erreur de recopie : le while était en fait : while (list($lib, $pos) = each($colonnes)), bien sûr
0
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















;
0
Bonsoir,
Finalement, il faut appliquer la formule standard même dans ce cas.
Le problème est maintenant résolu
Cordialement
Gilles HUDAULT
0