Affichage en infinité de fois

emmanuelle_ Messages postés 46 Date d'inscription   Statut Membre Dernière intervention   -  
jeremy.s Messages postés 1226 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,


j'ai besoin de comparer 2 tableaux multidimensionnel
voici mon code :

foreach( $tab1 as $key11 => $val1) {
foreach( $val1 as $key111 => $val2) {
foreach( $val2 as $key1 => $val) {
foreach($tab as $keyy=>$value1){
foreach($value1 as $keyyy=>$value2){
foreach($value2 as $key=>$value){

if($val!==$value){
echo $val


}
}
}
}
}
}
pour juste affiche ceux qui sont pas en commun mais il les affiche en infinité de fois je ne sais pas pourquoi; :(:(:(
Merci pour votre aide

3 réponses

Mihawk Messages postés 4315 Date d'inscription   Statut Contributeur Dernière intervention   846
 
Salut,

On pourrai résumer ce que fais avec deux tableaux simples :

$tab1 = array(1, 2, 3, 4, 5);
$tab2 = array(1, 2, 3, 10, 11);

Ici mes tableaux possèdent donc deux différences.

Toi tu fais ça :
1/ Tu prends le "1" du premier tableau et tu le compares à tout le 2e. Il y est une fois dans le deuxième donc ici on va afficher "1111".
2/ Tu prends le "2" [...] : "2222".
3/ Tu prends le "3" [...] : "3333".
4/ Tu prends le "4" [...] : "44444".
5/ TU prends le "5" [...] : "555555".

Toi tu fais pareil mais avec des tableaux à 3 dimensions. Au finale, tu n'affiches pas les clés qui sont en différence, mais tu affiches une clé du premier tableau à chaque fois qu'elle n'est pas la même que n'importe quelle clé du 2e tableau.

En gros, si ton premier tableau ne contient 100 fois "1" et que ton 2e contient 99 fois "0" et une fois "1" alors ton script va t'afficher 100*99 = 9900 fois "1". Tu me suis ?

Mais que veux-tu faire exactement ?
0
jeremy.s Messages postés 1226 Date d'inscription   Statut Membre Dernière intervention   79
 
Salut,

Pour bien comprendre la structure de tes tableaux, fais un print_r de chacun. Peut être que tu y verras plus clair dans façon de les parcourir.

Sinon, Mihawk marque un point : que veux tu faire exactement ?
Car il y a pas mal de fonction dans php pour les tableaux, peut être que ce que tu veux faire existe déjà.
0
emmanuelle_ Messages postés 46 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour;

pour tab quand j'ai fait print_r; il m'affiche ça
Array(
[0] => Array
(
[0] => Array
(
[0] =>mot
)

)

[1] => Array
(
[0] => Array
(
[0] => htt
)

)

[2] => Array
(
[0] => Array
(
[0] =>fac
)

)
[3] => Array
(
[0] => Array
(
[0] => collège
)

)

[4] => Array
(
[0] => Array
(
[0] =>primaire
)

)
)
et pour tab1 il m'affiche:


Array(
[0] => Array
(
[0] => Array
(
[0] =>mot
)

)

[1] => Array
(
[0] => Array
(
[0] => httmap
)

)

[2] => Array
(
[0] => Array
(
[0] =>fac
)

)
[3] => Array
(
[0] => Array
(
[0] => collège
)

)

[4] => Array
(
[0] => Array
(
[0] =>crèche
)

)
)
moi je voudrai récupérer les éléments qui se trouvent dans tab 1 et pas dans tab comme crèche, httmap
0
Mihawk Messages postés 4315 Date d'inscription   Statut Contributeur Dernière intervention   846
 
Quel est l'intérêt d'utiliser des tableaux à trois dimensions si tu ne mets qu'une seule valeur dedans à chaque fois ? Autant faire :

$tab = array("mot", "htt", "fac", "collège", "primaire");
$tab1 = array("mot", "httmap", "fac", "collège", "crèche");

Et ainsi tu auras tes différences en faisant :

$diff = array_diff($tab1, $tab);

0
emmanuelle_ Messages postés 46 Date d'inscription   Statut Membre Dernière intervention  
 
je les ai récupére comme ça après un preg match all
0
Mihawk Messages postés 4315 Date d'inscription   Statut Contributeur Dernière intervention   846
 
Un preg_match_all renvoie du 2 dimensions, pas du 3...
0
emmanuelle_ Messages postés 46 Date d'inscription   Statut Membre Dernière intervention  
 
j'ai effectué un preg_match_all sur un tableau à deux dimensions donc le résultat est un tableau à 3 dimensions
0
Mihawk Messages postés 4315 Date d'inscription   Statut Contributeur Dernière intervention   846
 
Alors je te conseille d'effectuer une conversion de ce tableau à 3 dimensions en un tableau à 1 dimension avant de rechercher les différences. Tu y gagneras en temps de traitement.
0
emmanuelle_ Messages postés 46 Date d'inscription   Statut Membre Dernière intervention  
 
oui c'est ce que je suis en train de faire mais il faut le transférer à un tableau de 2 dimensions car j'ai besoin de séparer les éléments de mon tableau aux sous tableaux c'est pour ça j'ai fait ce code :
$tab1=array(array());
for ($i=0;$i<$nb;$i++){
foreach( $tab[$i] as $key11 => $value1) {
foreach( $value1 as $key111 => $value2) {
foreach( $value2 as $key1111 => $value) {


array_push($tab1, $value);


}
}
}
}
print_r($tab1);

mais sans succès il affiche tout dans un seul tableau mais moi j'ai besoin vraiment de le séparer dans un tableau à deux dimensions:(:(:(
0