Array : fusionner les doublons

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Array : fusionner les doublons

Re: Array : fusionner les doublons

par pol2095 » 14 déc. 2011, 09:24

ç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);

Re: Array : fusionner les doublons

par xTG » 14 déc. 2011, 08:10

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

par pol2095 » 14 déc. 2011, 01:49

le pb, sur un gros tableau c'est très lent

Re: Array : fusionner les doublons

par pol2095 » 13 déc. 2011, 22:27

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

par pol2095 » 13 déc. 2011, 22:05

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

Code : Tout sélectionner

Wrong parameter count for array_search()

Re: Array : fusionner les doublons

par Skw33d » 13 déc. 2011, 19:40

Il y a aussi la fonction array_unique

Re: Array : fusionner les doublons

par xTG » 13 déc. 2011, 18:54

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];
  }
}

Array : fusionner les doublons

par pol2095 » 13 déc. 2011, 18:43

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