Tableau multidimentionnel comme paramètre
MEJED
-
THE GHOST -
THE GHOST -
Bonjour,
je désire passer un tableau multidimentionnel comme paramètre pour une fonction,je suis totalement bloqué.
j'ai pas encore reussi à le faire et le reste de mon travail en dépond.SVP
voila mon code:
le code qui remplie le tableau à partir d'un autre tableau :
while($count<$i)
{
if($resultats[$count][1]==$id )
{
$commnade[$var][0]=$resultats[$count][0];
$commnade[$var][1]=$resultats[$count][9];
$commnade[$var][2]=$resultats[$count][12];
$commnade[$var][3]=$resultats[$count][8];//quantité
$commnade[$var][4]=$resultats[$count][7];//designation article
$commnade[$var][5]=0;//montant article non utilisé
$commnade[$var][6]=$resultats[$count][17];//type remise pour l'article
$commnade[$var][7]=$resultats[$count][16];//la remise pour l'article
$commnade[$var][8]=$resultats[$count][13];//type remise globale pour la commande
$commnade[$var][9]=$resultats[$count][15];//montant offert
$commnade[$var][10]=$resultats[$count][14];//montant remise
$commnade[$var][11]=$resultats[$count][4];//montant hors taxe
$commnade[$var][12]=$resultats[$count][5];//montant TTC
$commnade[$var][13]=$resultats[$count][6];//total TTC pour l'article
$commnade[$var][14]=$resultats[$count][3];//nom du vendeur
$commnade[$var][15]=$resultats[$count][2];//id caisse
$commnade[$var][16]=$resultats[$count][10];//montant espèce
$commnade[$var][17]=$resultats[$count][11];//montant chèque banquaire
$var++;
}
else
{ $tab=list($commande,$cmd);
voir($commde,$var);//ici je teste avec une fonction simple d'affichage
$id=$resultats[$count][1];
$var=0;
}
$count++;
}
la fonction :
function voir($commande,$var)
{
for($a=0;$a<$var;$a++)
{
echo"<br>".$commande[$var][0];
}
je désire passer un tableau multidimentionnel comme paramètre pour une fonction,je suis totalement bloqué.
j'ai pas encore reussi à le faire et le reste de mon travail en dépond.SVP
voila mon code:
le code qui remplie le tableau à partir d'un autre tableau :
while($count<$i)
{
if($resultats[$count][1]==$id )
{
$commnade[$var][0]=$resultats[$count][0];
$commnade[$var][1]=$resultats[$count][9];
$commnade[$var][2]=$resultats[$count][12];
$commnade[$var][3]=$resultats[$count][8];//quantité
$commnade[$var][4]=$resultats[$count][7];//designation article
$commnade[$var][5]=0;//montant article non utilisé
$commnade[$var][6]=$resultats[$count][17];//type remise pour l'article
$commnade[$var][7]=$resultats[$count][16];//la remise pour l'article
$commnade[$var][8]=$resultats[$count][13];//type remise globale pour la commande
$commnade[$var][9]=$resultats[$count][15];//montant offert
$commnade[$var][10]=$resultats[$count][14];//montant remise
$commnade[$var][11]=$resultats[$count][4];//montant hors taxe
$commnade[$var][12]=$resultats[$count][5];//montant TTC
$commnade[$var][13]=$resultats[$count][6];//total TTC pour l'article
$commnade[$var][14]=$resultats[$count][3];//nom du vendeur
$commnade[$var][15]=$resultats[$count][2];//id caisse
$commnade[$var][16]=$resultats[$count][10];//montant espèce
$commnade[$var][17]=$resultats[$count][11];//montant chèque banquaire
$var++;
}
else
{ $tab=list($commande,$cmd);
voir($commde,$var);//ici je teste avec une fonction simple d'affichage
$id=$resultats[$count][1];
$var=0;
}
$count++;
}
la fonction :
function voir($commande,$var)
{
for($a=0;$a<$var;$a++)
{
echo"<br>".$commande[$var][0];
}
A voir également:
- Tableau multidimentionnel comme paramètre
- Tableau word - Guide
- Parametre dns - Guide
- Trier un tableau excel - Guide
- Code ascii tableau - Guide
- Remettre parametre usine pc - Guide
14 réponses
Je ne vois pas ou es le problème si tu passes en argument un array même a plusieurs dimensions tu retrouve cet array dans ta fonction, par contre tu as des erreurs dans ton code:
$commnade[$var][0]=$resultats[$count][0];
et tu appelles la fonction par voir($commde,$var)
erreurs de frappe ??
rectifies déja:
appel de la fonction
voir($commande);
et la fonction:
$commnade[$var][0]=$resultats[$count][0];
et tu appelles la fonction par voir($commde,$var)
erreurs de frappe ??
rectifies déja:
$commande[$var][0]=$resultats[$count][0]; etc....
appel de la fonction
voir($commande);
et la fonction:
function voir($arg1){
//visualisation:
echo '<pre>';
print_r($arg1);
echo '<pre/>4;
//ou autre methode
foreach($arg1 as $cle=>$s_array){
echo 'Dimension1: '.$cle.'<br />';
for ($i=0;$i<sizeof(s_array);$i++){
echo $s_array[$i].'<br />';
}
}
}
l'erreur n'est pas une faute de frappe car j'ai changé le nom de la variable en copiant le code dans le message car c'était une autre variable, je vais essayer le code que vous m'avez proposé.l'erreur c'est au niveau de reconnaissance du tableau
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
la fonction liste ou disant cette ligne n'est pas utile, j'ai oublié de l'effacer.comme je vous ai dis, j'ai essayé avec plusieurs methodes mais toujours le paramètre $commande n'est pas reconnue comme tableau mutidimentionnel.
Es tu certain justement que la variable $commande est bien l'array que tu espère creer ?
car je ne sais pas ce que tu as avant ce dode mais les variables $var et $count ne sont pas initialisées à 0 ou autre valeur
de plus ton principe me parait bizarre:
tu fais un test
if($resultats[$count][1]==$id )
si oui tu charge l'array
si non tu passes cet array à la fonction
donc si la condition n'est pas vraie ou jamais vraie tu essaye de passer un argument à la fonction qui n'est pas encore initialisé.
car je ne sais pas ce que tu as avant ce dode mais les variables $var et $count ne sont pas initialisées à 0 ou autre valeur
de plus ton principe me parait bizarre:
tu fais un test
if($resultats[$count][1]==$id )
si oui tu charge l'array
si non tu passes cet array à la fonction
donc si la condition n'est pas vraie ou jamais vraie tu essaye de passer un argument à la fonction qui n'est pas encore initialisé.
Merci alin pour votre aide .
Le but de ce code est, que lorsque la requête routourne les résultats(l'ensemble des cmmande passé),je récupère dans un autre tableau.c'est à dire que chaque commande possède un détails de cmmande,étant que le premier tableau qui contient les information selon le numéro de $id, il peut exister un même $id repété plus qu'une fois et chacun est relative a un détal :
commande:1 *********article1
commande:1 *********article2
commande:1 *********article3
commande:2*********article1
...ainsi de suite
la fonction que je lui transmis le tableau(qui contient tout les articles de la même commande) doit afficher les détails.pour le test que vous m'avez demandé(s'il n'y pas de résultats), est déja assuré, donc il y en a certainement .
ben voila mon code :
$res=mysql_query("select commande.id_commande,nom_user,des_article,Montant_ht,montant_ttc,id_caisse,total_ttc,jj,mm,aa,hh,mn,qte,num_table,MONTANT_ESPECE,MONTANT_CHEQUE_BANQUAIRE,NBR_COUVERTS,TYPE_REMISE_GLOBALE,MONTANT_REMISE,MONTANT_OFFERT,REMISE,TYPE_REMISE from commande,details_commande,ordre,article,users where commande.id_commande=details_commande.id_commande and commande.num_ordre=ordre.num_ordre and article.id_article=details_commande.id_article and commande.id_user=users.id_user AND commande.num_ordre>=\"$num_ordre1\" and commande.num_ordre<=\"$num_ordre2\" order By(commande.num_ordre)");
$num_lignes=mysql_num_rows($res);//nombre de lignes retournées par la requête
$resultats[$num_lignes][17]=array();//Matrice pour stocker les résultats de retour de la requête
$commande[$num_lignes][17]=array();
$i=0;//variable qui contient le nombre des résultats retournées par la requête éxecuté
while($result=mysql_fetch_row($res))
{ if($result[11]<10)
{
$result[11]="0".$result[11];// pour avoir 2 chiffre pour les minutes: au lieu de 5, on doit avoir 05
}
$resultats[$i][0]=$result[7]."-".$result[8]."-".$result[9]." ".$result[10].":".$result[11];//date et heure
$resultats[$i][1]=$result[0];//id commande
$resultats[$i][2]=$result[5];//id caisse
$resultats[$i][3]=$result[1];//nom vendeur
$resultats[$i][4]=$result[3];//montant hors taxe
$resultats[$i][5]=$result[4];//Montant TTC
$resultats[$i][6]=$result[6];//Total TTC
$resultats[$i][7]=$result[2];//Designation de l'article
$resultats[$i][8]=$result[12];//Quantité de l'article vendue
$resultats[$i][9]=$result[13];//numéro de la table pour le cas d'un restaurant
$resultats[$i][10]=$result[14];//Montant espece
$resultats[$i][11]=$result[15];//Montant chèque banquaire
$resultats[$i][12]=$result[16];//Nbre de couvert pour le cas d'un restaurant
$resultats[$i][13]=$result[17];//type de remise globale pour la commande
$resultats[$i][14]=$result[18];//montant de la remise pour la commande
$resultats[$i][15]=$result[19];//montant offert pour la commande
$resultats[$i][16]=$result[20];//remise pour l'article
$resultats[$i][17]=$result[21];//type de la remise pour l'article
$i++;
}
switch($filtre)
{
case 0: //si aucun filtre n'a été utilisé
if($i==0)
{
echo"Aucun enregistrement ne correspond à vos critères de recherche.";
}
else
{ $count=0;$var=0;
$id=$resultats[$count][1]; //sauvgarder le premier id des commandes
while($count<$i)
{
if($resultats[$count][1]==$id )
{
$commnade[$var][0]=$resultats[$count][0];
$commnade[$var][1]=$resultats[$count][9];
$commnade[$var][2]=$resultats[$count][12];
$commnade[$var][3]=$resultats[$count][8];//quantité
$commnade[$var][4]=$resultats[$count][7];//designation article
$commnade[$var][5]=0;//montant article non utilisé
$commnade[$var][6]=$resultats[$count][17];//type remise pour l'article
$commnade[$var][7]=$resultats[$count][16];//la remise pour l'article $commnade[$var][8]=$resultats[$count][13];//type remise globale pour la commande
$commnade[$var][9]=$resultats[$count][15];//montant offert
$commnade[$var][10]=$resultats[$count][14];//montant remise
$commnade[$var][11]=$resultats[$count][4];//montant hors taxe
$commnade[$var][12]=$resultats[$count][5];//montant TTC
$commnade[$var][13]=$resultats[$count][6];//total TTC pour l'article $commnade[$var][14]=$resultats[$count][3];//nom du vendeur
$commnade[$var][15]=$resultats[$count][2];//id caisse
$commnade[$var][16]=$resultats[$count][10];//montant espèce
$commnade[$var][17]=$resultats[$count][11];//montant chèque banquaire
$var++;
}
else
{
voir($commande,$var);
$id=$resultats[$count][1];
$var=0;
}
$count++;
}
}
break;
Le but de ce code est, que lorsque la requête routourne les résultats(l'ensemble des cmmande passé),je récupère dans un autre tableau.c'est à dire que chaque commande possède un détails de cmmande,étant que le premier tableau qui contient les information selon le numéro de $id, il peut exister un même $id repété plus qu'une fois et chacun est relative a un détal :
commande:1 *********article1
commande:1 *********article2
commande:1 *********article3
commande:2*********article1
...ainsi de suite
la fonction que je lui transmis le tableau(qui contient tout les articles de la même commande) doit afficher les détails.pour le test que vous m'avez demandé(s'il n'y pas de résultats), est déja assuré, donc il y en a certainement .
ben voila mon code :
$res=mysql_query("select commande.id_commande,nom_user,des_article,Montant_ht,montant_ttc,id_caisse,total_ttc,jj,mm,aa,hh,mn,qte,num_table,MONTANT_ESPECE,MONTANT_CHEQUE_BANQUAIRE,NBR_COUVERTS,TYPE_REMISE_GLOBALE,MONTANT_REMISE,MONTANT_OFFERT,REMISE,TYPE_REMISE from commande,details_commande,ordre,article,users where commande.id_commande=details_commande.id_commande and commande.num_ordre=ordre.num_ordre and article.id_article=details_commande.id_article and commande.id_user=users.id_user AND commande.num_ordre>=\"$num_ordre1\" and commande.num_ordre<=\"$num_ordre2\" order By(commande.num_ordre)");
$num_lignes=mysql_num_rows($res);//nombre de lignes retournées par la requête
$resultats[$num_lignes][17]=array();//Matrice pour stocker les résultats de retour de la requête
$commande[$num_lignes][17]=array();
$i=0;//variable qui contient le nombre des résultats retournées par la requête éxecuté
while($result=mysql_fetch_row($res))
{ if($result[11]<10)
{
$result[11]="0".$result[11];// pour avoir 2 chiffre pour les minutes: au lieu de 5, on doit avoir 05
}
$resultats[$i][0]=$result[7]."-".$result[8]."-".$result[9]." ".$result[10].":".$result[11];//date et heure
$resultats[$i][1]=$result[0];//id commande
$resultats[$i][2]=$result[5];//id caisse
$resultats[$i][3]=$result[1];//nom vendeur
$resultats[$i][4]=$result[3];//montant hors taxe
$resultats[$i][5]=$result[4];//Montant TTC
$resultats[$i][6]=$result[6];//Total TTC
$resultats[$i][7]=$result[2];//Designation de l'article
$resultats[$i][8]=$result[12];//Quantité de l'article vendue
$resultats[$i][9]=$result[13];//numéro de la table pour le cas d'un restaurant
$resultats[$i][10]=$result[14];//Montant espece
$resultats[$i][11]=$result[15];//Montant chèque banquaire
$resultats[$i][12]=$result[16];//Nbre de couvert pour le cas d'un restaurant
$resultats[$i][13]=$result[17];//type de remise globale pour la commande
$resultats[$i][14]=$result[18];//montant de la remise pour la commande
$resultats[$i][15]=$result[19];//montant offert pour la commande
$resultats[$i][16]=$result[20];//remise pour l'article
$resultats[$i][17]=$result[21];//type de la remise pour l'article
$i++;
}
switch($filtre)
{
case 0: //si aucun filtre n'a été utilisé
if($i==0)
{
echo"Aucun enregistrement ne correspond à vos critères de recherche.";
}
else
{ $count=0;$var=0;
$id=$resultats[$count][1]; //sauvgarder le premier id des commandes
while($count<$i)
{
if($resultats[$count][1]==$id )
{
$commnade[$var][0]=$resultats[$count][0];
$commnade[$var][1]=$resultats[$count][9];
$commnade[$var][2]=$resultats[$count][12];
$commnade[$var][3]=$resultats[$count][8];//quantité
$commnade[$var][4]=$resultats[$count][7];//designation article
$commnade[$var][5]=0;//montant article non utilisé
$commnade[$var][6]=$resultats[$count][17];//type remise pour l'article
$commnade[$var][7]=$resultats[$count][16];//la remise pour l'article $commnade[$var][8]=$resultats[$count][13];//type remise globale pour la commande
$commnade[$var][9]=$resultats[$count][15];//montant offert
$commnade[$var][10]=$resultats[$count][14];//montant remise
$commnade[$var][11]=$resultats[$count][4];//montant hors taxe
$commnade[$var][12]=$resultats[$count][5];//montant TTC
$commnade[$var][13]=$resultats[$count][6];//total TTC pour l'article $commnade[$var][14]=$resultats[$count][3];//nom du vendeur
$commnade[$var][15]=$resultats[$count][2];//id caisse
$commnade[$var][16]=$resultats[$count][10];//montant espèce
$commnade[$var][17]=$resultats[$count][11];//montant chèque banquaire
$var++;
}
else
{
voir($commande,$var);
$id=$resultats[$count][1];
$var=0;
}
$count++;
}
}
break;
ton erreur de frappe subsite toujours:
if($resultats[$count][1]==$id )
{
$commnade[$var][0]=$resultats[$count][0];
$commnade[$var][1]=$resultats[$count][9];
tu mets $commnade au lieu de $commande
pour voir ton array une fois chargé, mets juste avant break:
echo '<pre>';
print_r($commande);
echo '</pre>';
et un conseils pour tes noms de variables mets des noms plus explicites car tu mets $results $resultats etc...
=> risque de confusion et difficile à comprendre qd comme moi ion vient dans ton code
perso à la place de:
$res=mysql_query("select commande.id_commande,nom_user,des_article,Montant_ht,montant_ttc,id_caisse,total_ttc,jj,mm,aa,hh,mn,qte,num_table,MONTANT_ESPECE,MONTANT_CHEQUE_BANQUAIRE,NBR_COUVERTS,TYPE_REMISE_GLOBALE,MONTANT_REMISE,MONTANT_OFFERT,REMISE,TYPE_REMISE from commande,details_commande,ordre,article,users where commande.id_commande=details_commande.id_commande and commande.num_ordre=ordre.num_ordre and article.id_article=details_commande.id_article and commande.id_user=users.id_user AND commande.num_ordre>=\"$num_ordre1\" and commande.num_ordre<=\"$num_ordre2\" order By(commande.num_ordre)");
$num_lignes=mysql_num_rows($res);//nombre de lignes retournées par la requête
$resultats[$num_lignes][17]=array();//Matrice pour stocker les résultats de retour de la requête
$commande[$num_lignes][17]=array();
$i=0;//variable qui contient le nombre des résultats retournées par la requête éxecuté
while($result=mysql_fetch_row($res))
{ if($result[11]<10)
j'aurait mis:
if($resultats[$count][1]==$id )
{
$commnade[$var][0]=$resultats[$count][0];
$commnade[$var][1]=$resultats[$count][9];
tu mets $commnade au lieu de $commande
pour voir ton array une fois chargé, mets juste avant break:
echo '<pre>';
print_r($commande);
echo '</pre>';
et un conseils pour tes noms de variables mets des noms plus explicites car tu mets $results $resultats etc...
=> risque de confusion et difficile à comprendre qd comme moi ion vient dans ton code
perso à la place de:
$res=mysql_query("select commande.id_commande,nom_user,des_article,Montant_ht,montant_ttc,id_caisse,total_ttc,jj,mm,aa,hh,mn,qte,num_table,MONTANT_ESPECE,MONTANT_CHEQUE_BANQUAIRE,NBR_COUVERTS,TYPE_REMISE_GLOBALE,MONTANT_REMISE,MONTANT_OFFERT,REMISE,TYPE_REMISE from commande,details_commande,ordre,article,users where commande.id_commande=details_commande.id_commande and commande.num_ordre=ordre.num_ordre and article.id_article=details_commande.id_article and commande.id_user=users.id_user AND commande.num_ordre>=\"$num_ordre1\" and commande.num_ordre<=\"$num_ordre2\" order By(commande.num_ordre)");
$num_lignes=mysql_num_rows($res);//nombre de lignes retournées par la requête
$resultats[$num_lignes][17]=array();//Matrice pour stocker les résultats de retour de la requête
$commande[$num_lignes][17]=array();
$i=0;//variable qui contient le nombre des résultats retournées par la requête éxecuté
while($result=mysql_fetch_row($res))
{ if($result[11]<10)
j'aurait mis:
$query="SELECT commande.id_commande,nom_user,des_article,Montant_ht,montant_ttc,id_caisse,total_ttc,jj,mm,aa,hh,mn,qte,num_table,MONTANT_ESPECE,MONTANT_CHEQUE_BANQUAIRE,NBR_COUVERTS,TYPE_REMISE_GLOBALE,MONTANT_REMISE,MONTANT_OFFERT,REMISE,TYPE_REMISE FROM commande,details_commande,ordre,article,users WHERE commande.id_commande=details_commande.id_commande AND commande.num_ordre=ordre.num_ordre AND article.id_article=details_commande.id_article and commande.id_user=users.id_user AND commande.num_ordre>=."$num_ordre1." AND commande.num_ordre<=."$num_ordre2." ORDER BY(commande.num_ordre)");
//mets des majuscules pour les "ordres" mysql (SELECT FROM WHERE AND etc... c'est plus lisible
$reponse=mysql_query($query);
$nb_lignes=mysql_num_rows($reponse);//nombre de lignes retournées par la requête
$resultats[$num_lignes][17]=array();//Matrice pour stocker les résultats de retour de la requête
$commande[$num_lignes][17]=array(); //ça sert à quoi ?
//mets plutot:
$commande=array();
$i=0;//variable qui contient le nombre des résultats retournées par la requête éxecuté
while($ligne=mysql_fetch_row($reponse))
{ if($ligne[11]<10)
il y a une ) en trop dans mon precedent post à cette ligne:
$query="SELECT commande.id_commande,nom_user,des_article,Montant_ht,montant_ttc,id_caisse,total_ttc,jj,mm,aa,hh,mn,qte,num_table,MONTANT_ESPECE,MONTANT_CHEQUE_BANQUAIRE,NBR_COUVERTS,TYPE_REMISE_GLOBALE,MONTANT_REMISE,MONTANT_OFFERT,REMISE,TYPE_REMISE FROM commande,details_commande,ordre,article,users WHERE commande.id_commande=details_commande.id_commande AND commande.num_ordre=ordre.num_ordre AND article.id_article=details_commande.id_article and commande.id_user=users.id_user AND commande.num_ordre>=."$num_ordre1." AND commande.num_ordre<=."$num_ordre2." ORDER BY(commande.num_ordre)";
je te remercies infiniment Alain_42, j'ai pas fais attention à cette faute de frappe.Comme vous avez vu, j'ai fais un simple copie coller sans prendre attention de la reproduction d'une ligne incorrecte.
conçernant les noms explecites des variables, c'était juste un premier essai, mais je vais prendre en considération tes conseils.
conçernant les noms explecites des variables, c'était juste un premier essai, mais je vais prendre en considération tes conseils.