Tableaux multidimensionnel et compter les items de même type

Petit nouveau ! | 3 Messages

04 juil. 2006, 11:00

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.

Eléphant du PHP | 413 Messages

04 juil. 2006, 11:44

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

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

04 juil. 2006, 12:01

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 ?

Invité
Invité n'ayant pas de compte PHPfrance

04 juil. 2006, 20:06

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

Invité
Invité n'ayant pas de compte PHPfrance

04 juil. 2006, 20:22

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.

Petit nouveau ! | 3 Messages

04 juil. 2006, 20:23

aie désolé j'ai posté en croyant être loggué :oops:

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

04 juil. 2006, 21:06

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

Petit nouveau ! | 3 Messages

04 juil. 2006, 22:18

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

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

04 juil. 2006, 22:37

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 />';
}