Page 1 sur 1

Tableaux multidimensionnel et compter les items de même type

Posté : 04 juil. 2006, 11:00
par ascodas
Salut,

Je suis en train de faire un panier et je voudrais faire tableau récapitulatif de ce qu'il y a dans le panier, j'arrive à faire une fonction qui compte le produit que je lui passe en paramètre :
function compter_prd($article)
{	
	$prd_panier=0;
	$nb_articles = count($_SESSION['panier']['id_article']);
	for($i=0;$i<$nb_articles;$i++)
	{
	if($_SESSION['panier']['id_article'][$i] == $article)
		{
		$prd_panier=$prd_panier+1;
		$montant += $_SESSION['panier']['qte'][$i] * $_SESSION['panier']['prix'][$i];
		}
	}

echo "<tr><td>".$article."</td><td>".$prd_panier."</td><td>".$montant."</td></tr>";
}
Mais ce que je voudrais est une fonction qui me compte tout les produits qui ont le même nom sans que je le spécifie en entré (je ne suis pas censé savoir ce qu'il y a dans le panier) et qui accessoirement calcule le prix total par article et le total des totals.

Voici l'architecture de mon tableau et un dump avec deux articles dedans :
$_SESSION['panier'] = array();

$_SESSION['panier']['id_article'] = array();
$_SESSION['panier']['qte'] = array();
$_SESSION['panier']['prix'] = array();



Array ( [id_article] => Array ( [0] => Sebadoh [1] => Dinosaur ) [qte] => Array ( [0] => 1 [1] => 1 ) [prix] => Array ( [0] => 10 [1] => 15 ) )

Merci.

Posté : 04 juil. 2006, 11:44
par goeb
salut,
tout les produits qui ont le même nom
le même id_article ?

Pour compter les articles en plusieurs exemplaires, voici une méthode simple : en parcourant le tableau $_SESSION['panier']['id_article'], tu peuples un autre tableau $a, de la manière suivante :
$a = array();
foreach ($_SESSION['panier']['id_article'] as $id) {
  if (isset($a[$id])) $a[$id]++;
  else $a[$id] = 1;
}

Re: Tableaux multidimensionnel et compter les items de même

Posté : 04 juil. 2006, 12:01
par ouckileou
Mais ce que je voudrais est une fonction qui me compte tout les produits qui ont le même nom sans que je le spécifie en entré (je ne suis pas censé savoir ce qu'il y a dans le panier) et qui accessoirement calcule le prix total par article et le total des totals.
Est-ce que array_count_values() ne serait pas une bonne base de départ ?

Posté : 04 juil. 2006, 20:06
par Invité
salut,
tout les produits qui ont le même nom
le même id_article ?

Pour compter les articles en plusieurs exemplaires, voici une méthode simple : en parcourant le tableau $_SESSION['panier']['id_article'], tu peuples un autre tableau $a, de la manière suivante :
$a = array();
foreach ($_SESSION['panier']['id_article'] as $id) {
  if (isset($a[$id])) $a[$id]++;
  else $a[$id] = 1;
}
Merci a vous deux.

- Pour la première solution j'ai procédé en construisant une fonction :
function compter()
{
$a = array();
foreach ($_SESSION['panier']['id_article'] as $id) {
if (isset($a[$id])) $a[$id]++;
else $a[$id] = 1;
}
return $id." : ".$a[$id];
}

et dans ma page ;
echo compter();
Alors ca marche mais un article est affiché à la fois, alors que je voudrais un tableau récapitulatif de tous les articles présents dans le panier avec leur quantité en temps réel.

Mais peut-être je m'y prend mal ...

Pour être plus explicite quand j'ajoute un exemplaire de Sebadoh, ta fonction me dit bien Sebadoh : 1, mais ensuite si je rajoute un article Dinosaur la ligne précédente est substituée par Dinosaur : 1 et ainsi de suite, alors que je les voudrais l'une sous l'autre ...

Merci

Re: Tableaux multidimensionnel et compter les items de même

Posté : 04 juil. 2006, 20:22
par Invité
Mais ce que je voudrais est une fonction qui me compte tout les produits qui ont le même nom sans que je le spécifie en entré (je ne suis pas censé savoir ce qu'il y a dans le panier) et qui accessoirement calcule le prix total par article et le total des totals.
Est-ce que array_count_values() ne serait pas une bonne base de départ ?
Ca semble en effet un tres bon point de départ car le dump donne un truc du style :
Array ( [Sebadoh] => 3 [Dinosaur] => 4 )
par contre j'aimerais récupérer le nom de l'id article dans une variable et la quantité dans une autre pour pouvoir le présenter correctement.

Merci.

Posté : 04 juil. 2006, 20:23
par ascodas
aie désolé j'ai posté en croyant être loggué :oops:

Re: Tableaux multidimensionnel et compter les items de même

Posté : 04 juil. 2006, 21:06
par ouckileou
par contre j'aimerais récupérer le nom de l'id article dans une variable et la quantité dans une autre pour pouvoir le présenter correctement.
Il existe beaucoup de fonctions de manipulation de tableaux, quand tu veux faire un truc, prend l'habitude d'aller voir la liste et de regarder s'il n'y en a pas une qui fait ce que tu veux ou qui pourrait participer :
http://fr.php.net/manual/fr/ref.array.php

En l'occurence, each() semble convenir

Posté : 04 juil. 2006, 22:18
par ascodas
Ok merci pour le condeil et le lien, par contre je vois pas en quoi each va m'avancer je veux la somme des quantité mais pas afficher l'artiche chaque fois qu'il dans une ligne de tableau.

Ce que j'arrive a faire avec ma première fonction, mais en spécifiant les produits que je veux compter :

Voila l'exemple de ce que voudrais obtenir sans rien spécifier en entrée :

Image

PS : Je débute ;)

Posté : 04 juil. 2006, 22:37
par ouckileou
Ben tu fais tonarray_count_values() et sur le tableau que tu récupères tu passes each() ce qui te renvoie 2 variables : nom et quantité

Ou tu peux faire simplement une boucle foreach :
echo 'Dans votre panier :<br />';
foreach($tabQuantites as $nomArticle => $qte) {
   echo $nomArticle.' : '.$qte.' exemplaire(s)<br />';
}