Operation sur tableau php
Résolu
nephis43
Messages postés
6
Date d'inscription
Statut
Membre
Dernière intervention
-
nephis43 Messages postés 6 Date d'inscription Statut Membre Dernière intervention -
nephis43 Messages postés 6 Date d'inscription Statut Membre Dernière intervention -
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 :
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 :
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
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:
- Operation sur tableau php
- Tableau word - Guide
- Tableau ascii - Guide
- Trier un tableau excel - Guide
- Imprimer tableau excel sur une page - Guide
- Tableau croisé dynamique - Guide
3 réponses
Bonjour,
Et un tableau dans un tableau comme ceci:
????
affiche
106
206
306
A noter qu'on peut gérer les index de clés comme ceci:
Je sais, c'est pas 'propre' comme des tables en SGBD, mais c'est une idée qui peut dépanner...
A+
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+
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.
*/
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.
*/