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 :

[PHP8] Réindexer un tableau


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de arcane
    Inscrit en
    Avril 2003
    Messages
    313
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 313
    Par défaut [PHP8] Réindexer un tableau
    Bonjour,
    J'ai un tableau comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $tab5[0][0] = 'monfichier1';
    $tab5[1][0] = '123';
    $tab5[0][1] = 'monfichier2';
    $tab5[1][1] = '124';
    $tab5[0][12] = 'monfichier3';
    $tab5[1][12] = '125';
    $tab5[0][13] = 'monfichier4';
    $tab5[1][13] = '126';
    avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    foreach($tab5 as $nb => $infos){
                    echo 'tab1 n°' .($nb). ' :<br>';
                    foreach ($infos as $c => $v){
                        echo $c. ' : ' .$v. '<br>';
                    }
                    echo '<br>';
                };
    donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    tab1 n°0 :
    0 : monfichier1
    1 : monfichier2
    12 : monfichier3
    13 : monfichier4
     
    tab1 n°1 :
    0 : 123
    1 : 124
    12 : 125
    13 : 126
    Je voudrais réindexer le tableau pour avoir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    tab1 n°0 :
    0 : monfichier1
    1 : monfichier2
    2 : monfichier3
    3 : monfichier4
     
    tab1 n°1 :
    0 : 123
    1 : 124
    2 : 125
    3 : 126
    La fonction array_values ne fait rien dans ce cas.

    Le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $nouveautab = array();
    $i = 0;
    foreach($tab5 as $nb => $infos){
                    echo 'tab1 n°' .($nb). ' :<br>';
     
                    foreach ($infos as $c => $v){
                        echo $c. ' : ' .$v. '<br>';
    					$nouveautab[0][$i] = $c;
    					$nouveautab[1][$i] = $v;
    					$i++;
                    };
                    echo '<br>';
                };
    donne :
    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
    16
    17
    18
    19
    tab1 n°0 :
    0 : 0
    1 : 1
    2 : 12
    3 : 13
    4 : 0
    5 : 1
    6 : 12
    7 : 13
     
    tab1 n°1 :
    0 : monfichier1
    1 : monfichier2
    2 : monfichier3
    3 : monfichier4
    4 : 123
    5 : 124
    6 : 125
    7 : 126
    Je n'arrive pas à trouver la bonne boucle.
    Merci

  2. #2
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par défaut
    array_values marche bien:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $tab5[0] = array_values($tab5[0]);
    $tab5[1] = array_values($tab5[1]);
    En dehors de ta question, tu devrait arrêter de te galèrer avec des variables numérotées ($tab1 ... $tab5 ...$tabN) et envisager d'utiliser des tableaux associatifs plutôt qu'indexés ou une autre structure plus parlante pour tes données.
    Puisque les noms de fichiers et les nombres semblent aller par pair, pourquoi ne pas faire quelque chose comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $truc = [ // avec un mot plus parlant que "truc" bien sûr
        ['nom' => 'nomfichier1', 'code' => 123],
        ['nom' => 'nomfichier2', 'code' => 124],
        ['nom' => 'nomfichier3', 'code' => 125],
        ['nom' => 'nomfichier4', 'code' => 126]
    ];
    Tu te perdrais un peu moins qu'avec les index. C'est facile à manipuler, et si tu as besoin d'extraire tous les noms ou tous les codes, tu peux le faire d'un coup avec array_column. Facile à réindexer $truc = array_values($truc);, à boucler, et clair pour l'accès echo $truc[2]['nom']; // nomfichier3

  3. #3
    Membre éclairé Avatar de arcane
    Inscrit en
    Avril 2003
    Messages
    313
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 313
    Par défaut
    Oui, c'est ca merci.
    Ne te focalises pas sur tab5, c'est juste pour mes exemples, en réalité je n'ai que 2 tableaux.
    Je pense avoir compris mon problème, par rapport aux tableaux à 2 dimensions, en fait ils ne sont pas réellement à 2 dimensions mais ce sont des tableaux de 2 tableaux.
    Je vais me plonger plus sur les tableaux associatifs, mais j'ai du mal à faire le lien avec mon besoin (lectures de données à mettre dans 2 tableaux, comparer ces 2 tableaux, enlever les données identiques dans les 2 sens, ressortir les différences.)
    Avec les index, j'ai l'impression de mieux contrôler mon nombre de lignes. C'est peut-être qu'une impression…

  4. #4
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par défaut
    Citation Envoyé par arcane Voir le message
    Je pense avoir compris mon problème, par rapport aux tableaux à 2 dimensions, en fait ils ne sont pas réellement à 2 dimensions mais ce sont des tableaux de 2 tableaux.
    Oui, les tableaux multidimensionnels sont toujours des tableaux de tableaux (de tableaux de tableaux ... jusqu'à la dimension N).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. réindexer un tableau multi-dimensionnel
    Par laloune dans le forum Langage
    Réponses: 1
    Dernier message: 30/10/2012, 09h18
  2. Réponses: 9
    Dernier message: 12/08/2009, 15h05
  3. transmision de tableau en parametre
    Par Horus dans le forum C++Builder
    Réponses: 3
    Dernier message: 16/05/2002, 11h15
  4. Réponses: 4
    Dernier message: 13/05/2002, 16h43

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