Problème fonction de tri PHP

Fermé
Apâche - 2 janv. 2009 à 17:29
Apaachee Messages postés 248 Date d'inscription mardi 13 novembre 2007 Statut Membre Dernière intervention 25 août 2011 - 5 janv. 2009 à 14:46
Bonjour,
C'est la première fois que je post sur ce forum, soyez indulgent pour la présentation de mon problème ... =)

Voila je créé un petit site de e commerce ou les clients se log et à l'ouverture d'une session, 2 variables s'initialisent :

$_SESSION["panier"] = array();
$_SESSION["qtite"] = array();


La première variable enregistrent les No d'articles acheté et la 2e la quantité. Le problème est que si un "client" achète un objet, puis le réachète une deuxième fois, je dois trier mes tableaux...

Je procède donc en deux temps :

Je trie mes 2 tableaux de sorte que les NoArticle présent dans $_SESSION["panier"] soit triés :

array_multisort($_SESSION["panier"] , $_SESSION["qtite"]);


Puis je fais ma fonction de tri :

$a = array();
$b = array();
$c = array();
$d = array();

//On recopie les tableaux $_SESSION["panier"] et $_SESSION["qtite"] dans $c et $d
$i=0;
foreach($_SESSION["panier"] as $val){
	$c[$i]=$val;
	$d[$i]=$_SESSION["qtite"][$i];
	$i++;
}

echo $i;
$i--;
//$i contient la longueur des tableaux

$k = 0;
while($k != $i){
	$test = 0;
	//On concatene les 2 No d'articles identiques et on ajoute leur quantite
	if($c[$k] == $c[$k+1]){
		$a[$k] = $c[$k];
		$b[$k] = $c[$k] + $c[$k+1];
		$test = 1;
	}
	
	//Si on a concaténé, la longueur du tableau a diminuée de 1
	if ($test == 1){
		$i--;
		//On finit le remplissage des tableaux a et b
		for( $l = $k + 2 ; $l <= $i-1 ; $l++){
			$a[$l-1] = $c[$l];
			$b[$l-1] = $d[$l];
		}
	}
	else{
		$k++;
		//On copie $c et $d dans $a et $b
		$f = 0;
		foreach($c as $val){
			$a[$f] = $c[$f];
			$b[$f] = $d[$f];
		}
	}
	$c = array();
	$d = array();
	

	//Et on sauvegarde $a et $b dans $c et $d pour un nouveau triage
	$f=0;
	foreach($a as $val){
		$c[$f] = $val;
		$d[$f] = $b[$f];
	}
	
	//On réinitialise $a et $b
	$a = array();
	$b = array();*/
}
	
$_SESSION["panier"] = array();	
$_SESSION["qtite"] = array();

$i = 0;
foreach($c as $val){
	$_SESSION["panier"][$i] = $c[$i];
	$_SESSION["qtite"][$i] = $d[$i];
	$i++;
}



et donc cette dernière fonction ne marche pas... et impossible de trouver d'où ça vient...
Merci à tous ceux qui se pencheront sur mon problème =)
A voir également:

4 réponses

Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
2 janv. 2009 à 22:07
Bonjour,

Tu ne te casses pas un peu trop la tête ?
Pourquoi tu ne rechercherais pas simplement si ton No d'article est dans le premier tableau, et, si oui, quel est son index $i ?
Ensuite, il suffit de mettre à jour le deuxième tableau, non ?

Xavier
0
Ah je n'avais pas pensé a faire un truc plus simple, je suis parti directement sur la fonction de tri ! Merci je vais me pencher la dessus ! Mais pour y avoir consacré un nombre conséquent de temps, j'aurais bien aimé savoir ce qui cloche avec ma fonction de tri :'(

Merci Reivax !
0
Apaachee Messages postés 248 Date d'inscription mardi 13 novembre 2007 Statut Membre Dernière intervention 25 août 2011 47
3 janv. 2009 à 16:01
UP
0
Apaachee Messages postés 248 Date d'inscription mardi 13 novembre 2007 Statut Membre Dernière intervention 25 août 2011 47
5 janv. 2009 à 14:46
Je m'autorépond à ma question, merci a Reivax pour son coup de main :

$a = array(); // Nouveaux objets triés
$b = array(); // Nouvelles quantités
$i=0;
foreach($_SESSION["panier"] as $val){
	$j = 0;
	$test = 1;
	foreach($a as $vala){
		if($val == $vala){ //NoArticle deja dans $a
			$ancienneQtite = $b[$j];
			$Qtiteajout = $_SESSION["qtite"][$i];
			$nvlleQtite = $ancienneQtite + $Qtiteajout;
			$b[$j] = $nvlleQtite;
			$test = 2;
		}
	$j++;
	}
	if($test==1){
		$a[] = $val;
		$b[] = $_SESSION["qtite"][$i];
	}
$i++;
}

$_SESSION["panier"] = array();	
$_SESSION["qtite"] = array();

$i = 0;
foreach($a as $val){
	$_SESSION["panier"][$i] = $a[$i];
	$_SESSION["qtite"][$i] = $b[$i];
	$i++;
	
	
}
0