Partage
  • Partager sur Facebook
  • Partager sur Twitter

Diviser un array

... selon la valeur d'une des clés

Sujet résolu
    3 février 2006 à 17:48:56

    :) Voilà mon problème : j'ai un array qui contient des arrays. Un truc dans ce genre :

    $array1 = array(
       '0' => array(
          'code' => 'code0',
          'nom' => 'test0',
          'groupe' => '0',
       ),
       '1' => array(
          'code' => 'code1',
          'nom' => 'test1',
          'groupe' => '0',
       ),
       '2' => array(
          'code' => 'code2',
          'nom' => 'test2',
          'groupe' => '1',
       ),
       '3' => array(
          'code' => 'code3',
          'nom' => 'test3',
          'groupe' => '1',
       ),
    );


    J'aimerai, à partir de cet aray, en faire deux autres. Un qui ne contient que les array avec groupe = 0, et un autre avec groupe = 1. Ca donnerai alors ça pour mon exemple :

    $array_gr0 = array(
       '0' => array(
          'code' => 'code0',
          'nom' => 'test0',
          'groupe' => '0',
       ),
       '1' => array(
          'code' => 'code1',
          'nom' => 'test1',
          'groupe' => '0',
       ),
    );

    $array_gr1 = array(
       '0' => array(
          'code' => 'code2',
          'nom' => 'test2',
          'groupe' => '1',
       ),
       '1' => array(
          'code' => 'code3',
          'nom' => 'test3',
          'groupe' => '1',
       ),
    );


    Comment puis-je obtenir ce résultat ? :euh:

    Merci d'avance ! ^^
    • Partager sur Facebook
    • Partager sur Twitter
      3 février 2006 à 18:58:42

      Tu te codes une vérif avec array_key_exists() sur chaque tableau.
      Si la clé existe et que sa valeur est égaleà 1 alors tu place les éléments dans un tableau A sinon dans un tableau B.

      Rien de compliqué.

      Maintenant tu peux toujours aller consulter la doc afin de voir, si dans la multitude de fontions liées aux tableaux, il n'y en aurait pas une qui le ferait tout seul ????
      • Partager sur Facebook
      • Partager sur Twitter
        3 février 2006 à 20:17:16

        Citation : Bison

        Tu te codes une vérif avec array_key_exists() sur chaque tableau.
        Si la clé existe et que sa valeur est égaleà 1 alors tu place les éléments dans un tableau A sinon dans un tableau B.

        Rien de compliqué.

        Maintenant tu peux toujours aller consulter la doc afin de voir, si dans la multitude de fontions liées aux tableaux, il n'y en aurait pas une qui le ferait tout seul ????



        Ouais, cette solution, j'y avais pensé mais je pensais qu'il y aurait un moyen plus direct.

        J'ai cherché dans la doc, y'a une fonction qui permet de filtrer, mais avec des array dans un array, j'arrive pas à l'adapter. Enfin bon, je vais me débrouiller en faisant une fonction à la main ! ^^
        • Partager sur Facebook
        • Partager sur Twitter
          3 février 2006 à 20:34:51

          Citation : Xiap

          Enfin bon, je vais me débrouiller en faisant une fonction à la main ! ^^


          Peut-être aurais-tu préféré que je la code pour toi ? :-°
          • Partager sur Facebook
          • Partager sur Twitter
            3 février 2006 à 21:56:14

            Citation : Bison

            Citation : Xiap

            Enfin bon, je vais me débrouiller en faisant une fonction à la main ! ^^


            Peut-être aurais-tu préféré que je la code pour toi ? :-°



            Non non ! Parce que de toute façons, l'exemple que je t'ai donné n'est pas vraiment celui de mon fichier, donc j'aurais encore dû adapter ta fonction ! :p

            Et pour la petite histoire, j'ai reussi à faire ce que je voulais ! :D:-°
            • Partager sur Facebook
            • Partager sur Twitter
              3 février 2006 à 21:56:56

              Alors pourrais-tu donner la solution ?
              • Partager sur Facebook
              • Partager sur Twitter
                3 février 2006 à 22:49:55

                Yep bien sûr ! ;) En gros, voilà ce que ca donne. Je l'ai fait pour 5 groupes (de 0 à 4) :

                $array_depart = array(
                   '0' => array(
                      'code' => 'code0',
                      'nom' => 'test0',
                      'groupe' => 'gr0',
                   ),
                   '1' => array(
                      'code' => 'code1',
                      'nom' => 'test1',
                      'groupe' => 'gr0',
                   ),
                   '2' => array(
                      'code' => 'code2',
                      'nom' => 'test2',
                      'groupe' => 'gr1',
                   ),
                   '3' => array(
                      'code' => 'code3',
                      'nom' => 'test3',
                      'groupe' => 'gr1',
                   ),
                   '4' => array(
                      'code' => 'code4',
                      'nom' => 'test4',
                      'groupe' => 'gr3',
                   ),
                   '5' => array(
                      'code' => 'code5',
                      'nom' => 'test5',
                      'groupe' => 'gr4',
                   ),
                );

                $compte_array = count($array_depart);

                // Je créé les 5 array vides
                for ( $i = 0; $i < 5; $i++)
                {
                        ${'groupe' . $i} = array();
                }

                // Je met les noms des groupes dans un array
                $categories = array('gr0', 'gr1', 'gr2', 'gr3', 'gr4');

                // Pour savoir combien il y aura d'elements dans chaque array
                $compte_categ = array(0,0,0,0,0);

                for ( $i = 0; $i < $compte_array; $i++)
                {
                        for ( $j = 0; $j < 5; $j++)
                        {
                                if ($array_depart[$i]['groupe'] == $categories[$j] )
                                {
                                        ${'groupe' . $j}[$compte_categ[$j]] = $i;
                                        $compte_categ[$j] = $compte_categ[$j] +1;
                                }
                        }
                }

                for ( $i = 0; $i < 5; $i++)
                {
                        echo 'groupe' . $i . '<br />';
                        print_r(${'groupe' . $i});
                        echo '<br />';
                }


                Fouiiiii ! >_<

                Je viens de le tester chez moi ca marche :) . Sauf que, au lieu de copier les "sous-array", je copie que leur clé, ca me suffit.

                Et encore pour la petite histoire, finalement, je suis tombé sur un autre os par la suite, alors du coup ca m'a pas aidé (à part à m'ameliorer un peu en array ! :p ). Je vais (encore) devoir trouver une autre solution ... o_O
                • Partager sur Facebook
                • Partager sur Twitter

                Diviser un array

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown