Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 6 sur 6
  1. #1
    Débutant
    Profil pro
    Inscrit en
    mai 2005
    Messages
    2 253
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : mai 2005
    Messages : 2 253
    Points : 698
    Points
    698

    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 :
    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
    Modérateur
    Avatar de rawsrc
    Homme Profil pro Martin
    Dev indep
    Inscrit en
    mars 2004
    Messages
    3 599
    Détails du profil
    Informations personnelles :
    Nom : Homme Martin
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : mars 2004
    Messages : 3 599
    Points : 8 965
    Points
    8 965

    Par défaut

    Bonjour,

    voici ce qui devrait faire l'affaire :
    Code :
    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']);
    }
     
    ?>
    # Dans la Création, tout est permis mais tout n'est pas utile...

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

    Informations forums :
    Inscription : mai 2005
    Messages : 2 253
    Points : 698
    Points
    698

    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
    Modérateur
    Avatar de rawsrc
    Homme Profil pro Martin
    Dev indep
    Inscrit en
    mars 2004
    Messages
    3 599
    Détails du profil
    Informations personnelles :
    Nom : Homme Martin
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : mars 2004
    Messages : 3 599
    Points : 8 965
    Points
    8 965

    Par défaut

    Oubli de ma part, voici la même chose corrigée :
    Code :
    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.
    # Dans la Création, tout est permis mais tout n'est pas utile...

  5. #5
    Débutant
    Profil pro
    Inscrit en
    mai 2005
    Messages
    2 253
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : mai 2005
    Messages : 2 253
    Points : 698
    Points
    698

    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 :
    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
    Modérateur
    Avatar de rawsrc
    Homme Profil pro Martin
    Dev indep
    Inscrit en
    mars 2004
    Messages
    3 599
    Détails du profil
    Informations personnelles :
    Nom : Homme Martin
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : mars 2004
    Messages : 3 599
    Points : 8 965
    Points
    8 965

    Par défaut

    // ???? = Si l'id_product n'a pas déjà été traité on mouline (c'est pour éviter les doublons)
    # Dans la Création, tout est permis mais tout n'est pas utile...

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •