Combiner deux tableaux
Résolu/Fermé
Coutcout86
Messages postés
195
Date d'inscription
lundi 23 novembre 2009
Statut
Membre
Dernière intervention
26 mai 2016
-
22 nov. 2013 à 11:36
Super_carotte Messages postés 1419 Date d'inscription mardi 8 janvier 2008 Statut Membre Dernière intervention 27 janvier 2015 - 22 nov. 2013 à 16:34
Super_carotte Messages postés 1419 Date d'inscription mardi 8 janvier 2008 Statut Membre Dernière intervention 27 janvier 2015 - 22 nov. 2013 à 16:34
A voir également:
- Combiner deux tableaux
- Fusionner deux tableaux excel - Guide
- Combiner deux cellules excel - Guide
- Comment combiner des pdf - Guide
- Tableaux croisés dynamiques - Guide
- Deux ecran pc - Guide
8 réponses
Utilisateur anonyme
22 nov. 2013 à 14:06
22 nov. 2013 à 14:06
Bonjour
Il ne faut pas faire ça en PHP mais directement en SQL grâce à une jointure.
Je ne connais pas le nom précis de tes tables, mais ça pourrait ressembler à :
Il ne faut pas faire ça en PHP mais directement en SQL grâce à une jointure.
Je ne connais pas le nom précis de tes tables, mais ça pourrait ressembler à :
SELECT p.CodePersonne, p.NomPersonne, p.PrenomPersonne, h.Nb_heure_tpc, h.Nb_heure_abs FROM personnes p INNER JOIN heures h ON p.CodePersonne=h.CodePersonne
Coutcout86
Messages postés
195
Date d'inscription
lundi 23 novembre 2009
Statut
Membre
Dernière intervention
26 mai 2016
22 nov. 2013 à 14:19
22 nov. 2013 à 14:19
Pour répondre à ta question dans mes requêtes, il y a déjà des jointures (LEFT JOIN ... ON ) mais le problème c'est que mes deux requêtes ont des WHERE différents (les dates sont différentes). Et en fonction de ses résultats j'aimerais coupler pour mettre les informations dans un seul et meme tableau.
Pourriez-vous m'aider ?
merci d'avance.
Pourriez-vous m'aider ?
merci d'avance.
Utilisateur anonyme
22 nov. 2013 à 14:41
22 nov. 2013 à 14:41
Il y aurait un tas de manières.
L'une des plus simples demande que tu modifies un peu la création de tes tableaux, pour obtenir (ce qui est plus logique, d'ailleurs) :
Ensuite, tu boucles sur le premier tableau en testant avec un simple isset() si l'élément de même indice existe dans le second.
L'une des plus simples demande que tu modifies un peu la création de tes tableaux, pour obtenir (ce qui est plus logique, d'ailleurs) :
Array(Et idem avec le second tableau.
[CodePersonne] => [0] => NomPersonne,
[1] => TypeContratPersonne
),
[CodePersonne2] => [0] => NomPersonne2,
[1] => TypeContratPersonne2
),
[CodePersonne3] => [0] => NomPersonne3,
[1] => TypeContratPersonne3
),
);
Ensuite, tu boucles sur le premier tableau en testant avec un simple isset() si l'élément de même indice existe dans le second.
Coutcout86
Messages postés
195
Date d'inscription
lundi 23 novembre 2009
Statut
Membre
Dernière intervention
26 mai 2016
22 nov. 2013 à 15:06
22 nov. 2013 à 15:06
Donc il faudrait que je fasse comme ceci
Le problème c'est que je ne sais pas quoi mettre dans mon isset je comprends pas trop la démarche pourrais-tu m'expliquer ?
merci d'avance.
Foreach($array1 as $codePersonnel => $personne){
foreach($array2 as $codePersonnel2 => $secondtableau){
if(!isset($codePersonnel2){
}
}
}
Le problème c'est que je ne sais pas quoi mettre dans mon isset je comprends pas trop la démarche pourrais-tu m'expliquer ?
merci d'avance.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Utilisateur anonyme
Modifié par le père. le 22/11/2013 à 15:36
Modifié par le père. le 22/11/2013 à 15:36
Tu compliques trop !
La démarche te semble-t-elle plus claire ou veux-tu d'autres explications ?
Je te rappelle qu'il faut D'ABORD que tu modifies la façon dont tu crées tes tableaux pour mettre le codePersonnel en indice au lieu de laisser les indices "naturels" 0,1,2...
Foreach($array1 as $codePersonnel=>$personne){
if(!isset($array2[$codePersonnel]){
echo $codePersonnel, $personne[0],$personne[1],array2[$codePersonnel][0],array2[$codePersonnel][1];
}
}
La démarche te semble-t-elle plus claire ou veux-tu d'autres explications ?
Je te rappelle qu'il faut D'ABORD que tu modifies la façon dont tu crées tes tableaux pour mettre le codePersonnel en indice au lieu de laisser les indices "naturels" 0,1,2...
Super_carotte
Messages postés
1419
Date d'inscription
mardi 8 janvier 2008
Statut
Membre
Dernière intervention
27 janvier 2015
127
Modifié par Super_carotte le 22/11/2013 à 16:14
Modifié par Super_carotte le 22/11/2013 à 16:14
Par rapport a l'exemple mis plus haut, voici un code très sale mais qui marche.
Attention, ça pique les yeux ^^ c'est du quick and dirty...
<?php
// TES DEUX TABLEAUX EXEMPLES
$tab1=Array(
0=> Array( 0 => "CodePersonne",
1 => "NomPersonne",
2=> "TypeContratPersonne"
),
1=> Array( 0 => "CodePersonne2",
1 => "NomPersonne2",
2=> "TypeContratPersonne2"
),
2=> Array( 0 => "CodePersonne3",
1 => "NomPersonne3",
2=> "TypeContratPersonne3"
)
);
$tab2=Array(
0=> Array( 0 => "CodePersonne",
1 => "Nb_heure_tpc",
2=> "Nb_heure_abs"
),
1=> Array( 0 => "CodePersonne2",
1 => "Nb_heure_tpc2",
2=> "Nb_heure_abs2"
),
2=> Array( 0 => "CodePersonne3",
1 => "Nb_heure_tpc3",
2=> "Nb_heure_abs3"
)
);
// LE CODE
echo "<pre>";
echo "avant:";
print_r($tab1);
echo "</pre>";
$i=0;
foreach($tab1 as $cle=>$value){
if($tab1[$i][0]==$tab1[$i][0]){
$tab1[$i][3]=$tab1[$i][1];
$tab1[$i][4]=$tab1[$i][2];
}
$i++;
}
echo "<pre>";
echo "apres:";
print_r($tab1);
echo "</pre>";
?>
Attention, ça pique les yeux ^^ c'est du quick and dirty...
<?php
// TES DEUX TABLEAUX EXEMPLES
$tab1=Array(
0=> Array( 0 => "CodePersonne",
1 => "NomPersonne",
2=> "TypeContratPersonne"
),
1=> Array( 0 => "CodePersonne2",
1 => "NomPersonne2",
2=> "TypeContratPersonne2"
),
2=> Array( 0 => "CodePersonne3",
1 => "NomPersonne3",
2=> "TypeContratPersonne3"
)
);
$tab2=Array(
0=> Array( 0 => "CodePersonne",
1 => "Nb_heure_tpc",
2=> "Nb_heure_abs"
),
1=> Array( 0 => "CodePersonne2",
1 => "Nb_heure_tpc2",
2=> "Nb_heure_abs2"
),
2=> Array( 0 => "CodePersonne3",
1 => "Nb_heure_tpc3",
2=> "Nb_heure_abs3"
)
);
// LE CODE
echo "<pre>";
echo "avant:";
print_r($tab1);
echo "</pre>";
$i=0;
foreach($tab1 as $cle=>$value){
if($tab1[$i][0]==$tab1[$i][0]){
$tab1[$i][3]=$tab1[$i][1];
$tab1[$i][4]=$tab1[$i][2];
}
$i++;
}
echo "<pre>";
echo "apres:";
print_r($tab1);
echo "</pre>";
?>
Amusant, ton test :
Bon, ok, tu voulais mettre $tab2 à l'un de deux. Mais même comme ça, ça ne marche pas parce que tu ne compares que les éléments de même indice dans les deux tableaux, alors qu'on peut trouver la même personne à deux indices différents dans les deux tableaux.
Pour rester dans ton esprit, il faudrait deux boucles imbriquées.
if($tab1[$i][0]==$tab1[$i][0]){
Bon, ok, tu voulais mettre $tab2 à l'un de deux. Mais même comme ça, ça ne marche pas parce que tu ne compares que les éléments de même indice dans les deux tableaux, alors qu'on peut trouver la même personne à deux indices différents dans les deux tableaux.
Pour rester dans ton esprit, il faudrait deux boucles imbriquées.
Super_carotte
Messages postés
1419
Date d'inscription
mardi 8 janvier 2008
Statut
Membre
Dernière intervention
27 janvier 2015
127
Modifié par Super_carotte le 22/11/2013 à 16:30
Modifié par Super_carotte le 22/11/2013 à 16:30
Bon, voila la V2:
$tab1=Array(
0=> Array( 0 => "CodePersonne",
1 => "NomPersonne",
2=> "TypeContratPersonne"
),
1=> Array( 0 => "CodePersonne2",
1 => "NomPersonne2",
2=> "TypeContratPersonne2"
),
2=> Array( 0 => "CodePersonne3",
1 => "NomPersonne3",
2=> "TypeContratPersonne3"
)
);
$tab2=Array(
0=> Array( 0 => "CodePersonne",
1 => "Nb_heure_tpc",
2=> "Nb_heure_abs"
),
1=> Array( 0 => "CodePersonne2",
1 => "Nb_heure_tpc2",
2=> "Nb_heure_abs2"
),
2=> Array( 0 => "CodePersonne3",
1 => "Nb_heure_tpc3",
2=> "Nb_heure_abs3"
)
);
echo "<pre>";
echo "avant:";
print_r($tab1);
echo "</pre>";
foreach($tab1 as $cle_tab1=>$value_tab1){
foreach($tab2 as $cle_tab2=>$value_tab2){
if($tab1[$cle_tab1][0]==$tab2[$cle_tab2][0]){
array_push($tab1[$cle_tab1], $tab2[$cle_tab2][1]);
array_push($tab1[$cle_tab1], $tab2[$cle_tab2][2]);
}
}
}
echo "<pre>";
echo "apres:";
print_r($tab1);
echo "</pre>";
$tab1=Array(
0=> Array( 0 => "CodePersonne",
1 => "NomPersonne",
2=> "TypeContratPersonne"
),
1=> Array( 0 => "CodePersonne2",
1 => "NomPersonne2",
2=> "TypeContratPersonne2"
),
2=> Array( 0 => "CodePersonne3",
1 => "NomPersonne3",
2=> "TypeContratPersonne3"
)
);
$tab2=Array(
0=> Array( 0 => "CodePersonne",
1 => "Nb_heure_tpc",
2=> "Nb_heure_abs"
),
1=> Array( 0 => "CodePersonne2",
1 => "Nb_heure_tpc2",
2=> "Nb_heure_abs2"
),
2=> Array( 0 => "CodePersonne3",
1 => "Nb_heure_tpc3",
2=> "Nb_heure_abs3"
)
);
echo "<pre>";
echo "avant:";
print_r($tab1);
echo "</pre>";
foreach($tab1 as $cle_tab1=>$value_tab1){
foreach($tab2 as $cle_tab2=>$value_tab2){
if($tab1[$cle_tab1][0]==$tab2[$cle_tab2][0]){
array_push($tab1[$cle_tab1], $tab2[$cle_tab2][1]);
array_push($tab1[$cle_tab1], $tab2[$cle_tab2][2]);
}
}
}
echo "<pre>";
echo "apres:";
print_r($tab1);
echo "</pre>";
Super_carotte
Messages postés
1419
Date d'inscription
mardi 8 janvier 2008
Statut
Membre
Dernière intervention
27 janvier 2015
127
22 nov. 2013 à 16:34
22 nov. 2013 à 16:34
La v3 qui gere si il y a plusieurs fois la meme personne dans le tableau 2:
echo "<pre>";
echo "avant:";
print_r($tab1);
echo "</pre>";
foreach($tab1 as $cle_tab1=>$value_tab1){
foreach($tab2 as $cle_tab2=>$value_tab2){
if($tab1[$cle_tab1][0]==$tab2[$cle_tab2][0]){
if(isset($tab1[$cle_tab1][3])){ // cas ou il y a deja une valeure
$tab1[$cle_tab1][3] += $tab2[$cle_tab2][1];
$tab1[$cle_tab1][4] += $tab2[$cle_tab2][2];
}else{
array_push($tab1[$cle_tab1], $tab2[$cle_tab2][1]);
array_push($tab1[$cle_tab1], $tab2[$cle_tab2][2]);
}
}
}
}
echo "<pre>";
echo "apres:";
print_r($tab1);
echo "</pre>";
echo "<pre>";
echo "avant:";
print_r($tab1);
echo "</pre>";
foreach($tab1 as $cle_tab1=>$value_tab1){
foreach($tab2 as $cle_tab2=>$value_tab2){
if($tab1[$cle_tab1][0]==$tab2[$cle_tab2][0]){
if(isset($tab1[$cle_tab1][3])){ // cas ou il y a deja une valeure
$tab1[$cle_tab1][3] += $tab2[$cle_tab2][1];
$tab1[$cle_tab1][4] += $tab2[$cle_tab2][2];
}else{
array_push($tab1[$cle_tab1], $tab2[$cle_tab2][1]);
array_push($tab1[$cle_tab1], $tab2[$cle_tab2][2]);
}
}
}
}
echo "<pre>";
echo "apres:";
print_r($tab1);
echo "</pre>";