IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Remplacer la commande each devenue obsolète


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Homme Profil pro
    retraité
    Inscrit en
    Décembre 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Décembre 2017
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Remplacer la commande each devenue obsolète
    ancien code : while ( list( $lib, $pos ) = each ($colonnes) ),
    remplacement proposé par le tutoriel PHP : foreach ($colonnes as list($lib, $pos)).

    la commande qui suit ($texte = $tab[$lib];) provoque le message : Clé de tableau non définie « »

    description des tables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $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 " }

    détail complet de la fonction originelle qui marche en version 5.6 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    function addLine( $ligne, $tab )
    {
        global $colonnes, $format;
     
        reset( $colonnes );
        while ( list( $lib, $pos ) = each ($colonnes) )
        {
            $longCell  = $pos -2;
            $texte     = $tab[ $lib ];
            $formText  = $format[ $lib ];
            $ordonnee += $pos;
            ...
        }
        return ...
    }

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 201
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 201
    Points : 8 426
    Points
    8 426
    Billets dans le blog
    17
    Par défaut
    Nope, while(list($x, $y) = each($a)) et foreach($a as list($x, $y)) ne sont pas équivalents.

    Dans cet exemple le list() du foreach() sert à décomposer une valeur de $a (un tableau de tableaux de 2 valeurs), et pas à récupérer la clef de l'élément courant.

    Fait plutôt cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach ($colonnes as $lib => $pos) {

  3. #3
    Candidat au Club
    Homme Profil pro
    retraité
    Inscrit en
    Décembre 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Décembre 2017
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Comment remplacer la commande each devenue obsolète ?
    >>> J'ai besoin de récupérer les 2 valeurs de la table colonnes, et non de les associer en tant que clé et valeur ...
    Après modification selon votre conseil, J'ai le message suivant :
    Avertissement: Tentative d’accès au décalage de tableau sur la valeur de type null dans le ligne : $formText = $format[$lib];

  4. #4
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 201
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 201
    Points : 8 426
    Points
    8 426
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par giludo Voir le message
    >>> J'ai besoin de récupérer les 2 valeurs de la table colonnes, et non de les associer en tant que clé et valeur ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $colonnes {
        ["Date et Heure"]=> int(31) 
        ["Fin"]=> int(14) 
        ["Réservation"]=> int(78)
        ["Salle"]=> int(43) 
        ["Montant"]=> int(20) 
    }
    Quelles "2 valeurs" ? Je vois 5 couples [clef => valeur]


    Après modification selon votre conseil, J'ai le message suivant :
    Donne-nous du code testable.

  5. #5
    Candidat au Club
    Homme Profil pro
    retraité
    Inscrit en
    Décembre 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Décembre 2017
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Avec la commande each initiale ( while ( list( $lib, $pos ) = each ($colonnes) )), les données $lib et $pos ont les valeurs suivantes : lib = Date et Heure , pos = 31lib = Fin , pos = 14lib = R servation , pos = 78lib = Salle , pos = 43lib = Montant , pos = 20

    Citation Envoyé par Séb. Voir le message
    Nope, while(list($x, $y) = each($a)) et foreach($a as list($x, $y)) ne sont pas équivalents.

    Dans cet exemple le list() du foreach() sert à décomposer une valeur de $a (un tableau de tableaux de 2 valeurs), et pas à récupérer la clef de l'élément courant.

    Fait plutôt cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach ($colonnes as $lib => $pos) {
    J'avais compris, en listant le contenu de la table Colonnes qu'elle contenait 2 colonnes de valeurs : $lib pour l'en-tête et $pos pour la largeur de la colonne, mais après analyse du résultat en appliquant votre suggestion, on retrouve les 2 champs bien renseignés. Merci.
    Ensuite, d'autres anomalies sont venues se greffer. Je vais les étudier plus à fond.
    C'est un peu compliqué pour moi car je suis néophyte et je reprends une application que je ne connais pas.
    Merci pour votre aide.
    giludo

Discussions similaires

  1. Réponses: 0
    Dernier message: 19/03/2010, 11h02
  2. comment remplacer la commande ls en C
    Par timtima dans le forum C
    Réponses: 6
    Dernier message: 18/12/2007, 20h13
  3. Réponses: 3
    Dernier message: 13/10/2007, 13h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo