Page 1 sur 1
Array : fusionner les doublons
Posté : 13 déc. 2011, 18:43
par pol2095
Bonjour,
j'ai 3 tableaux :
$nom[0]="jean";
$nom[1]="georges";
$nom[2]="georges";
$nom[3]="yvette";
$qte[0]="5";
$qte[1]="10";
$qte[2]="3";
$qte[3]="25";
$article[0]="chaussure";
$article[1]="pull";
$article[2]="pantalon";
$article[3]="casquette";
je voudrais fusionner les doublons "nom" pour qu'il me donne
Array "nom"
(
[0] => jean
[1] => georges
[2] => yvette
)
Array "qte"
(
[0] => 5
[1] => 13
[2] => 25
)
Array "article"
(
[0] => chaussure
[1] => pull pantalon
[2] => casquette
)
merci
Re: Array : fusionner les doublons
Posté : 13 déc. 2011, 18:54
par xTG
Tu peux le faire ainsi :
$nom[0]="jean";
$nom[1]="georges";
$nom[2]="georges";
$nom[3]="yvette";
$qte[0]="5";
$qte[1]="10";
$qte[2]="3";
$qte[3]="25";
$article[0]="chaussure";
$article[1]="pull";
$article[2]="pantalon";
$article[3]="casquette";
$nomFinal = array();
$qteFinal = array();
$articleFinal = array();
foreach($nom as $index => $val){
if( ($i = array_search($nomFinal)) !== false ){
$qteFinal[$i] += $qte[$index];
$articleFinal[$i] .= ' ' . $article[$index];
}else{
$nomFinal[] = $val;
$qteFinal[] = $qte[$index];
$articleFinal[] = $article[$index];
}
}
Re: Array : fusionner les doublons
Posté : 13 déc. 2011, 19:40
par Skw33d
Il y a aussi la fonction
array_unique
Re: Array : fusionner les doublons
Posté : 13 déc. 2011, 22:05
par pol2095
Tu peux le faire ainsi :
$nom[0]="jean";
$nom[1]="georges";
$nom[2]="georges";
$nom[3]="yvette";
$qte[0]="5";
$qte[1]="10";
$qte[2]="3";
$qte[3]="25";
$article[0]="chaussure";
$article[1]="pull";
$article[2]="pantalon";
$article[3]="casquette";
$nomFinal = array();
$qteFinal = array();
$articleFinal = array();
foreach($nom as $index => $val){
if( ($i = array_search($nomFinal)) !== false ){
$qteFinal[$i] += $qte[$index];
$articleFinal[$i] .= ' ' . $article[$index];
}else{
$nomFinal[] = $val;
$qteFinal[] = $qte[$index];
$articleFinal[] = $article[$index];
}
}
j'ai ce message d'erreur
Re: Array : fusionner les doublons
Posté : 13 déc. 2011, 22:27
par pol2095
j'ai modifié le code
$nom[0]="jean";
$nom[1]="georges";
$nom[2]="georges";
$nom[3]="yvette";
$qte[0]="5";
$qte[1]="10";
$qte[2]="3";
$qte[3]="25";
$article[0]="chaussure";
$article[1]="pull";
$article[2]="pantalon";
$article[3]="casquette";
$nomFinal = array();
$qteFinal = array();
$articleFinal = array();
foreach($nom as $index => $val){
if( ($i = array_search($val, $nom)) !== false ){
$nomFinal[$i] = $val;
$qteFinal[$i] += $qte[$index];
$articleFinal[$i] .= ' ' . $article[$index];
}else{
$nomFinal[] = $val;
$qteFinal[] = $qte[$index];
$articleFinal[] = $article[$index];
}
}
$nomFinal = array_values($nomFinal);
$qteFinal = array_values($qteFinal);
$articleFinal = array_values($articleFinal);
Re: Array : fusionner les doublons
Posté : 14 déc. 2011, 01:49
par pol2095
le pb, sur un gros tableau c'est très lent
Re: Array : fusionner les doublons
Posté : 14 déc. 2011, 08:10
par xTG
Ces données proviennent d'où ?
Car si cela vient d'un base pour le champ numérique tu peux faire une simple somme sur group by du nom.
Re: Array : fusionner les doublons
Posté : 14 déc. 2011, 09:24
par pol2095
ça provient d'un fichier texte
Nouveau script, beaucoup plus rapide
$nom[0]="jean";
$nom[1]="georges";
$nom[2]="georges";
$nom[3]="yvette";
$nom[4]="georges";
$qte[0]="5";
$qte[1]="10";
$qte[2]="3";
$qte[3]="25";
$qte[4]="2";
$article[0]="chaussure";
$article[1]="pull";
$article[2]="pantalon";
$article[3]="casquette";
$article[4]="chaussette";
array_multisort($nom, $qte, $article);
$array_unique = array_unique($nom);
if(count($nom) - count($array_unique)) {
for ($i=0; $i<count($nom); $i++) {
if(! array_key_exists($i, $array_unique)) {
$qteFinal[$j] += $qte[$i];
$articleFinal[$j] .= " ".$article[$i];
}
else {
$j=$i;
$nomFinal[$i] = $nom[$i];
$qteFinal[$i] = $qte[$i];
$articleFinal[$i] = $article[$i];
}
}
}
$nom = array_values($nomFinal);
$qte= array_values($qteFinal);
$article= array_values($articleFinal);