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 :

Comment supprimer un élément d'un array


Sujet :

Langage PHP

  1. #1
    Débutant  
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 096
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 096
    Points : 944
    Points
    944
    Par défaut Comment supprimer un élément d'un array
    Bonjour,
    Je bataille à trouver une solution et ca fait bien depuis 3 heures que je cherche à faire un truc de probablement simple pour certain.

    J'extrait de ma base de donnée ceci:
    Array ( [0] => Array ( [id_deal] => 5 [id_product] => 10 [id_creator] => 1 [id_customer] => 1 [fd_pourcent] => 1 [fd_start] => 2012-04-08 18:21:32 [fd_end] => 2012-04-12 18:21:40 )
    [1] => Array ( [id_deal] => 6 [id_product] => 1 [id_creator] => 1 [id_customer] => 1 [fd_pourcent] => 1 [fd_start] => 2012-04-08 18:31:31 [fd_end] => 2012-04-12 18:31:35 )
    [2] => Array ( [id_deal] => 7 [id_product] => 10 [id_creator] => 1 [id_customer] => 2 [fd_pourcent] => 1 [fd_start] => 2012-04-08 18:21:32 [fd_end] => 2012-04-12 18:21:40 ) )
    Le truc c'est que j'aimerais que tous les même ID soit classé dans un array. Alors j'ai fait une boucle pour avoir ceci (Si vous avez meilleur à proposer, je suis prenneur)
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    foreach ($results as $key => $result){
     
    				 //array_push($id_productsPool, (int)($result['id_product']));
    				 $_dealsPool[(int)($result['id_product'])] = $results;
     
    			}
    Ce qui affiche ceci:
    Array ( [10] => Array (
    [0] => Array ( [id_deal] => 5 [id_product] => 10 [id_creator] => 1 [id_customer] => 1 [fd_pourcent] => 1 [fd_start] => 2012-04-08 18:21:32 [fd_end] => 2012-04-12 18:21:40 )
    [1] => Array ( [id_deal] => 6 [id_product] => 1 [id_creator] => 1 [id_customer] => 1 [fd_pourcent] => 1 [fd_start] => 2012-04-08 18:31:31 [fd_end] => 2012-04-12 18:31:35 )
    [2] => Array ( [id_deal] => 7 [id_product] => 10 [id_creator] => 1 [id_customer] => 2 [fd_pourcent] => 1 [fd_start] => 2012-04-08 18:21:32 [fd_end] => 2012-04-12 18:21:40 )
    )
    [1] => Array (
    [0] => Array ( [id_deal] => 5 [id_product] => 10 [id_creator] => 1 [id_customer] => 1 [fd_pourcent] => 1 [fd_start] => 2012-04-08 18:21:32 [fd_end] => 2012-04-12 18:21:40 )
    [1] => Array ( [id_deal] => 6 [id_product] => 1 [id_creator] => 1 [id_customer] => 1 [fd_pourcent] => 1 [fd_start] => 2012-04-08 18:31:31 [fd_end] => 2012-04-12 18:31:35 )
    [2] => Array ( [id_deal] => 7 [id_product] => 10 [id_creator] => 1 [id_customer] => 2 [fd_pourcent] => 1 [fd_start] => 2012-04-08 18:21:32 [fd_end] => 2012-04-12 18:21:40 )
    )
    )
    Ce que j'essaye de faire maintenant, c'est de supprimer tous les id_product ne correspondant pas au premier index.

    Au final je souhaiterait avoir ceci
    Array ( [10] => Array (
    [0] => Array ( [id_deal] => 5 [id_product] => 10 [id_creator] => 1 [id_customer] => 1 [fd_pourcent] => 1 [fd_start] => 2012-04-08 18:21:32 [fd_end] => 2012-04-12 18:21:40 )
    [1] => Array ( [id_deal] => 7 [id_product] => 10 [id_creator] => 1 [id_customer] => 2 [fd_pourcent] => 1 [fd_start] => 2012-04-08 18:21:32 [fd_end] => 2012-04-12 18:21:40 )
    )
    [1] => Array (

    [0] => Array ( [id_deal] => 6 [id_product] => 1 [id_creator] => 1 [id_customer] => 1 [fd_pourcent] => 1 [fd_start] => 2012-04-08 18:31:31 [fd_end] => 2012-04-12 18:31:35 )

    )
    )
    J'ai essaye plein de truc dont array_slice, mais sans succès. Que pourriez-vous me suggérer pour chasser l'intru (ou les intrus)

    Je vous remercie
    Il ne suffit pas de tout savoir. Vouloir et persévérer, c'est déjà presque tout!

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Bonjour,

    voici ce qui devrait faire l'affaire :
    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
    25
    <?php
     
    $data = array(
       0 => array('id_deal' => 5, 'id_product' => 10, 'id_creator' => 1, 'id_customer' => 1, 'fd_pourcent' => 1, 'fd_start' => '2012-04-08 18:21:32', 'fd_end' => '2012-04-12 18:21:40'),
       1 => array('id_deal' => 6, 'id_product' => 1,  'id_creator' => 1, 'id_customer' => 1, 'fd_pourcent' => 1, 'fd_start' => '2012-04-08 18:31:31', 'fd_end' => '2012-04-12 18:31:35'),
       2 => array('id_deal' => 7, 'id_product' => 10, 'id_creator' => 1, 'id_customer' => 2, 'fd_pourcent' => 1, 'fd_start' => '2012-04-08 18:21:32', 'fd_end' => '2012-04-12 18:21:40')
    );
     
    $filtered = array();
     
    $filter_data = 
       function($id_product) use (&$data, &$filtered)
       {
          foreach($data as $key => $deal) {
             if ($deal['id_product'] == $id_product) {
                $filtered[$id_product][] = $deal;
             }
          }
       };
     
    foreach($data as $key => $deal) {
       $filter_data($deal['id_product']);
    }
     
    ?>

  3. #3
    Débutant  
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 096
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 096
    Points : 944
    Points
    944
    Par défaut
    Salut Merci pour ta réponse.

    C'est presque ca :o)

    Ca marche mais le truc c'est que je me retrouve avec des doublons.
    Array ( [10] => Array (
    [0] => Array ( [id_deal] => 5 [id_product] => 10 [id_creator] => 1 [id_customer] => 1 [fd_pourcent] => 1 [fd_start] => 2012-04-08 18:21:32 [fd_end] => 2012-04-12 18:21:40 )
    [1] => Array ( [id_deal] => 7 [id_product] => 10 [id_creator] => 1 [id_customer] => 2 [fd_pourcent] => 1 [fd_start] => 2012-04-08 18:21:32 [fd_end] => 2012-04-12 18:21:40 )
    [2] => Array ( [id_deal] => 5 [id_product] => 10 [id_creator] => 1 [id_customer] => 1 [fd_pourcent] => 1 [fd_start] => 2012-04-08 18:21:32 [fd_end] => 2012-04-12 18:21:40 )
    [3] => Array ( [id_deal] => 7 [id_product] => 10 [id_creator] => 1 [id_customer] => 2 [fd_pourcent] => 1 [fd_start] => 2012-04-08 18:21:32 [fd_end] => 2012-04-12 18:21:40 ) )
    [1] => Array (
    [0] => Array ( [id_deal] => 6 [id_product] => 1 [id_creator] => 1 [id_customer] => 1 [fd_pourcent] => 1 [fd_start] => 2012-04-08 18:31:31 [fd_end] => 2012-04-12 18:31:35 )
    )
    )
    Petite autre question, qu'es-ce & devant &$data?
    Il ne suffit pas de tout savoir. Vouloir et persévérer, c'est déjà presque tout!

  4. #4
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Oubli de ma part, voici la même chose corrigée :
    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
    25
    26
    <?php
     
    $data = array(
       0 => array('id_deal' => 5, 'id_product' => 10, 'id_creator' => 1, 'id_customer' => 1, 'fd_pourcent' => 1, 'fd_start' => '2012-04-08 18:21:32', 'fd_end' => '2012-04-12 18:21:40'),
       1 => array('id_deal' => 6, 'id_product' => 1,  'id_creator' => 1, 'id_customer' => 1, 'fd_pourcent' => 1, 'fd_start' => '2012-04-08 18:31:31', 'fd_end' => '2012-04-12 18:31:35'),
       2 => array('id_deal' => 7, 'id_product' => 10, 'id_creator' => 1, 'id_customer' => 2, 'fd_pourcent' => 1, 'fd_start' => '2012-04-08 18:21:32', 'fd_end' => '2012-04-12 18:21:40')
    );
     
    $filtered = array();
     
    $filter_data = function($id_product) use (&$data, &$filtered)
       {
          if (empty($filtered[$id_product])) {
             foreach($data as $key => $deal) {
                if ($deal['id_product'] == $id_product) {
                   $filtered[$id_product][] = $deal;
                }
             }
          }
       };
     
    foreach($data as $key => $deal) {
       $filter_data($deal['id_product']);
    }
     
    ?>
    Ensuite le & devant les variables signife qu'elles sont passées par référence et non par valeur (par valeur (= copie) Par défaut PHP passe les variables par valeur). De cette manière, la fonction closure modifiera directement le tableau $data et non une copie.

  5. #5
    Débutant  
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 096
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 096
    Points : 944
    Points
    944
    Par défaut
    Ha oui, là ca va vachement mieux, mais j'ai du mal a comprendre ton code. Pourrais-tu compléter mes commentaires
    Je te remercie car j'ai vraiment passe run temps de fou
    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
     
    					// Initialialise la variable en array
    					$dealsPool = array();
    					// Initialise la variable qui prend la valeur d'une fonction dont laquelle on référence deux variable 
    					$filter_data = function($id_product) use (&$results, &$dealsPool)
    					   {
    						  // ????
    						  if (empty($dealsPool[$id_product])) {
    							 // Fait la boucle des valuers extraites de la base de donnée (àdata)
    							 foreach($results as $key => $deal) {
    								// Si est égale $id_product
    								if ($deal['id_product'] == $id_product) {
    								   // Alors empile le array
    								   $dealsPool[$id_product][] = $deal;
    								}
    							 }
    						  }
    					   };
     
    					// Boucle la variable contenant les données extraites de la DB et fait appel à la fonction en passant la valeur de l'id du produit
    					foreach($results as $key => $deal) {
    					   $filter_data($deal['id_product']);
    					}
    Je te remercie encore
    Il ne suffit pas de tout savoir. Vouloir et persévérer, c'est déjà presque tout!

  6. #6
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    // ???? = Si l'id_product n'a pas déjà été traité on mouline (c'est pour éviter les doublons)

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

Discussions similaires

  1. Comment supprimer un élément d'une loop ?
    Par Battosaiii dans le forum PL/SQL
    Réponses: 9
    Dernier message: 14/06/2011, 10h45
  2. Comment supprimer un élément d'une ListView ?
    Par xXO--Hades--OXx dans le forum Composants graphiques
    Réponses: 5
    Dernier message: 12/12/2010, 16h57
  3. [Zend_Cache] Comment supprimer un élément ?
    Par whitespirit dans le forum Autres composants
    Réponses: 5
    Dernier message: 22/05/2008, 09h47
  4. Comment supprimer des éléments d'un fichier?
    Par quent197 dans le forum Débuter
    Réponses: 4
    Dernier message: 13/05/2008, 09h30
  5. Réponses: 7
    Dernier message: 16/05/2006, 15h40

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