Operation sur tableau php

Résolu
nephis43 Messages postés 6 Statut Membre -  
nephis43 Messages postés 6 Statut Membre -
Bonjour,

Escusez moi pour ce poste long, mais j'ai essayé d'être clair.
La question est à la fin du poste ^^.

A l'aide d'une fonctions, j'ai récupéré dans un tableau les valeurs de mes catégories de ma base de donné.
avec
[0]= ID
[1]=niveau dans ma hiérarchie de catégorie
[2]=Nom

mon tableau ressemble à ça :

Array   
(   
    [0] => Array   
        (   
            [0] => 1   
            [1] => 0   
            [2] => voiture   
        )   

    [1] => Array   
        (   
            [0] => 19   
            [1] => 1   
            [2] => peugeot   
        )   

    [2] => Array   
        (   
            [0] => 20   
            [1] => 2   
            [2] => 206   
        )   

    [3] => Array   
        (   
            [0] => 22   
            [1] => 3   
            [2] => phase1   
        )   

    [4] => Array   
        (   
            [0] => 2   
            [1] => 1   
            [2] => renault   
        )   

    [5] => Array   
        (   
            [0] => 13   
            [1] => 2   
            [2] => clio   
        )   

    [6] => Array   
        (   
            [0] => 16   
            [1] => 3   
            [2] => phase1   
        )


Ensuite je prépose à l'utilisateur de modifier une catégorie (exemple : peugeot) et de l'associer à sa nouvelle catégorie mère.

Or je ne voulais pas pouvoir associer une catégorie à sa propre catégorie en tant que catégorie mère ou à une de ses catégories filles.
En effet il est incohérent d'avoir 206 comme catégorie fille de peugeot et à la fois peugeot comme catégorie fille de 206.

Lorsque l'utilisateur sélectionne la catégorie qu'il veut modifier (toujours notre exemple sur peugeot : je crée un 2e tableau qui me donne les ID que l utilisateur ne DOIT pas pouvoir selectionner, cela me donne :
Array   
(   
    [0] => Array   
        (   
            [0] => 19   
            [1] => 0   
            [2] => peugeot   
        )   

    [1] => Array   
        (   
            [0] => 20   
            [1] => 1   
            [2] => 206   
        )   

    [2] => Array   
        (   
            [0] => 22   
            [1] => 2   
            [2] => phase1   
        )   

)


Ma question j'aimerai crée un 3e tableau qui m'indiquerait les valeur que l utilisateur peut associer à peugeot.

J'ai essaye $tab3 = $tab - $tab2 ;


avec $tab = le tableau complet
et $tab2 = le tableau contenant uniquement les ID interdites

Mais cela ne marche pas.

pour reformuler ce que je voudrais : J'aimerai donc récupérer un tableau qui serait le même que le tableau complet sans les valeur du tableau 2

3 réponses

  1. mpmp93 Messages postés 2931 Date d'inscription   Statut Membre Dernière intervention   1 343
     
    Bonjour,

    Et un tableau dans un tableau comme ceci:

    $voitures = array(
        'renault' => array(
            'clio',
            'twingo',
        ),
        'peugeot' => array(
            '106',
            '206',
            '306',
        ),
    );
    

    ????

    $marque = $voitures['peugeot'];
    
    foreach($marque AS $key => $modele) {
         echo '<br/>'.$modele;
    }
    

    affiche

    106
    206
    306

    A noter qu'on peut gérer les index de clés comme ceci:

    $voitures = array(
        'renault' => array(
            '1' => 'clio',
            '5' => 'twingo',
        ),
        'peugeot' => array(
            '1' => '106',
            '16' => '206',
            '354' => '306',
        ),
    );
    


    Je sais, c'est pas 'propre' comme des tables en SGBD, mais c'est une idée qui peut dépanner...

    A+

    0
  2. nephis43 Messages postés 6 Statut Membre
     
    merci je vais regarder ça :)
    0
  3. nephis43 Messages postés 6 Statut Membre
     
    J'ai réussi, j'indique la réponse sur le forum si ça peut aider certain pour d'autres problèmes. a la fin du code de ma fonction j'ai montré un exemple qui déroule l'algo.
    En espérant pouvoir aider quelqu'un =)

    dans mon programme je fais appel à une fonction :

    $tab3=array();
    comparer_tableau($tab, $tab2, $tab3);

    ma fonction est la suivante :

    /*
    Cette fonction recupere
    -tab (constitué de la catégorie que l'on veut modifier + ses catégories filles)
    -tab2 (constitué de toutes les catégories)
    -tab3 initialement vide qui est passé par référence.

    L objectif de la fonction est de récupérer dans tab3 toutes les catégories MOINS ( la catégorie traité et ses catégories filles )

    */

    function comparer_tableau($tab, $tab2, &$tab3) {
    //on parcours le tableau contenant toutes les catégories
    foreach($tab2 as $valeur)
    {
    //on initialise une variable
    $var=0;
    //on parcours le tableau contenant la catégorie traitée + ses filles
    foreach ($tab as $test)
    {
    // on incrémente une variable
    if ($valeur[0] != $test[0])
    $var++;

    //si cette variable est égal à la taille du tableau qui contient la catégorie traitée + ses filles
    //cela veut dire que l'id de la catégorie traité par le foreach de tab2 ne se trouve pas dans le foreach de temp
    //donc on ajoute cette id dans le tab3 qui sera retourné par la fonction.
    if($var==count($tab))
    $tab3[]=array($valeur[0],$valeur[1], $valeur[2]);
    }
    }
    }

    /*
    SCHEMA EXPLCATIF DE LA FONCTION COMPARER_TABLEAU.

    tab2 est de la forme
    [0] = array ( [0] => id categorie
    [1] => niveau de la catégorie (hiérarchie)
    [2] => nom de la catégorie

    tab est de la même forme que tab2 mais ils ne contiennent pas forcément les mêmes informations
    etc...

    Occupons nous uniquement des ID

    1 2 3 4 5 => liste des id de tab2

    2 5 => liste des id de tab

    objectif => avoir un tableau qui contient les ID 1 3 4

    **************1er parcours***********
    on parcours tab 2
    on traite id 1

    on parcours tab
    on traite id3

    1 != 2 => var=1

    on parcours tab
    on traite l'id5

    1!=5 => var=2

    var = taille du tableau tab, donc on écrit la catégorie 1 dans le tableau 3

    *********** 2e parcours **************
    on parcours tab 2
    on traite id 2

    on parcours tab
    on traite id3

    2 = 2 => var=0

    on parcours tab
    on traite l'id5

    2!=5 => var=1

    var est différent de la taille du tableau tab
    donc on n'écrit pas cette catégorie dans le nouveau tableau.
    */
    0