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 :

[Tableaux] Supprimer définitivement une ligne d'un tableau


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 329
    Points : 126
    Points
    126
    Par défaut [Tableaux] Supprimer définitivement une ligne d'un tableau
    Bonjour

    J'ai un tableau multidimensionnel comprenant plusieurs lignes.
    Je voudrai supprimer une ligne en particulier du tableau. Quel fonction faut il utiliser pour le faire?

    Merci d'avance

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Je suppose que si tu poses la question c'est que tu ne veux pas supprimer un element a partir de sa clef.

    Quel est le critere de suppression ?

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 329
    Points : 126
    Points
    126
    Par défaut rep
    ben
    J'ai tenté de faire cela avec unset();

    exemple je veux detruire la ligne 5 sur 10 lignes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $i=5;
    unset($tab[$i]);
    Cela me détruit la ligne mais quand je fais un sizeof(), au lieu d'avoir 9 pour 9 ligne j'ai 10

  4. #4
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 417
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 417
    Points : 15 786
    Points
    15 786
    Par défaut
    Citation Envoyé par carmen256 Voir le message
    ben
    J'ai tenté de faire cela avec unset();

    exemple je veux detruire la ligne 5 sur 10 lignes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $i=5;
    unset($tab[$i]);
    Cela me détruit la ligne mais quand je fais un sizeof(), au lieu d'avoir 9 pour 9 ligne j'ai 10
    je viens de tester et "unset" fonction très bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $tableau = array(
        3 => 33,
        'aa' => 'oo',
        5 => TRUE,
    );
     
    echo sizeof($tableau) . "\n"; // affiche "3"
     
    unset($tableau[5]);
     
    echo sizeof($tableau) . "\n"; // affiche "2"

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu peux faire un print_r() de ton tableau pour controler ce qu'il contient.

    Sinon l'authentique fonction php c'est count(), sizeof() n'est qu'un alias de basse extraction.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 329
    Points : 126
    Points
    126
    Par défaut rep
    Départ
    nbr de ligne 10

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $tab=$_SESSION['a'];
    $sel=$_POST['sel'];//---> numéro de ligne à supprimer
       foreach($sel as $val){
                             unset($tab[$val]);
    		                 }
    $cal=sizeof($tab);
    //---->affiche 9 très bien
    Maintenant c'est l'inverse quand je compte le nombre de ligne avec sizeof() ou count(), je vois que le nombre descend donc j'en déduisait que le ou les lignes sont supprimer.

    Et ben non même s'il compte 9. La ligne n'est pas supprimer
    lorsque je remet 9 dans

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $nbr=10;//--------10 ou 9
    for($i=0;$i<=$nbr;$i++){
              echo"".$tab[$i][0].",".$tab[$i][1].",".$tab[$i][2]."";
                                   }
    cela m'affiche le même nombre de lignes (10 lignes) alors que count() ou sizeof() me disent qu'il y en a 9

    Qu'est ce que j'ai supprimer? La clé ?
    Qu'est qu'il faut ajouter pour effacer la ligne et que cela revienne juste.

  7. #7
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Si tu vas de $i = 0 à $i = 9 ca fait 10 lignes.

  8. #8
    Membre éprouvé
    Avatar de Montor
    Homme Profil pro
    Autre
    Inscrit en
    Avril 2008
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 879
    Points : 963
    Points
    963
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    array_splice($input,$position,1)

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 329
    Points : 126
    Points
    126
    Par défaut rep
    Je n'arrive pas à détruire définitivement la ligne voulu dans un tableau.

    formulaire.php
    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
    20
    21
    22
    23
    24
     
    <?php
    $a=$_SESSION['a'];
    //---------- formulaire -----
    function aff($a){$b=sizeof($a);///-------> 4 Lignes?>
    <form method="post" action="traitement.php">
     <table><?php for($i=0;$i<=$b;$i++){
                   echo'<tr>
    		      <td><input type="checkbox" name="sup[]" value="'.$a[$i][0].'"><td>
    		      <td>'.$a[$i][1].'<td>
    		      <td>'.$a[$i][2].'<td>
    		    <tr>';
                                       }?>
     <table>
              <?php }
    //-----affichage
    aff($a);
    // ligne [0] : 1 : Nom a : Prenom a ;
    // ligne [1] : 2 : Nom b : Prenom b ;
    // ligne [2] : 3 : Nom c : Prenom c ;
    // ligne [3] : 4 : Nom d : Prenom d ;
    //--------------
    //---------- formulaire------------------
    ?>
    traitement.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?php 
    //---------- Traitement------------------
    $a=$_SESSION['a'];
    $b=sizeof($a);
    $c=$_POST['sup'];
       foreach($c as $val){unset($a[$val]);//---- 3 lignes
    	                      array_splice($a, $val);//doit détruire la ligne demandée
                                 }
       $_SESSION['a']=$a;
       header('location:index.php');
    //---------- traitement------------------
    ?>
    Le sizeof() reussit à supprimer la clé je pense. Car quand je refais un sizeof(), je n'ai plus
    que 3 lignes au lieu de 4. Par contre je n'arrive pas à supprimer définitivement la ligne du
    tableau. En effet même si le sizeof() me dit qu il y a 3 lignes. Lorsque je fais un affichage
    il m'en affiche 4 lignes. Comme si j'avais rien fait.

    Que faut-il faire pour la ligne voulu soit détruite ?

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 329
    Points : 126
    Points
    126
    Par défaut rep
    En trifouillant le code j 'ai reussi à trouver la solution.

    Voici la solution pour une ligne

    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
     
    //---------- Traitement------------------
    $val=$_SESSION['a'];
    $vol=$_POST['sup'];
    $cal=sizeof($val);
    $v=="";
    $nbr=$val-sizeof($vol);
           for($i=0;$i<=$_SESSION['b'][9];$i++){
    	       if($v==$val[$i][0]){
    		                        unset($val[$vol]);
    		                        array_splice($val, $vol, 1);
    		                        }
    	                          }
    $_SESSION['b'][9]=$nbr;
    $_SESSION['a']=$val;
    header('location:index.php');
    //---------- traitement------------------
    voici la solution pour plusieurs lignes

    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
     
    $val=$_SESSION['a'];
    $vol=$b[9];
    $vol=$_POST['sup'];
    $cal=sizeof($val);
    $v=="";
    $nbr=$val-sizeof($vol);
    foreach($vol as $vil){
    		              unset($val[$vol]);
    		              array_splice($val, $vol, 1);
    					}
                                }
    $_SESSION['b'][9]=$nbr;
    $_SESSION['a']=$val;
    header('location:index.php');

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

Discussions similaires

  1. Réponses: 15
    Dernier message: 16/09/2009, 16h19
  2. Supprimer dynamiquement une ligne d'un tableau
    Par loango dans le forum ASP.NET
    Réponses: 1
    Dernier message: 27/10/2008, 17h51
  3. Réponses: 1
    Dernier message: 28/03/2008, 21h37
  4. Réponses: 4
    Dernier message: 19/05/2006, 10h10
  5. supprimer une ligne dans un tableau
    Par sandball22 dans le forum C++Builder
    Réponses: 9
    Dernier message: 16/05/2006, 21h53

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