Operation sur tableau php

Résolu/Fermé
nephis43 Messages postés 6 Date d'inscription mardi 20 septembre 2011 Statut Membre Dernière intervention 22 septembre 2011 - Modifié par nephis43 le 21/09/2011 à 14:52
nephis43 Messages postés 6 Date d'inscription mardi 20 septembre 2011 Statut Membre Dernière intervention 22 septembre 2011 - 22 sept. 2011 à 09:03
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


A voir également:

3 réponses

mpmp93 Messages postés 6652 Date d'inscription mercredi 13 avril 2011 Statut Membre Dernière intervention 28 septembre 2015 1 339
21 sept. 2011 à 16:08
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
nephis43 Messages postés 6 Date d'inscription mardi 20 septembre 2011 Statut Membre Dernière intervention 22 septembre 2011
21 sept. 2011 à 16:48
merci je vais regarder ça :)
0
nephis43 Messages postés 6 Date d'inscription mardi 20 septembre 2011 Statut Membre Dernière intervention 22 septembre 2011
22 sept. 2011 à 09:03
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