Tableau multidimentionnel comme paramètre

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

14 réponses

  1. babou54
     
    regarde l'orthographe de tes variables
    0
  2. Alain_42 Messages postés 5413 Statut Membre 904
     
    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:
    $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 />';
    
       }
    
    }
    
    }
    0
  3. MEJED
     
    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
    0
  4. charles
     
    un instant je consulte ma documentation et je viens plus tard
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. le9
     
    je pense que c'est la machine qui derange......
    0
  7. Alain_42 Messages postés 5413 Statut Membre 904
     
    de plus pourquoi utilises tu la fonction list() ?
    0
  8. MEJED
     
    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.
    0
  9. Alain_42 Messages postés 5413 Statut Membre 904
     
    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é.
    0
  10. THE GHOST
     
    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;
    0
  11. Alain_42 Messages postés 5413 Statut Membre 904
     
    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:

    $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)
    0
  12. Alain_42 Messages postés 5413 Statut Membre 904
     
    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)";
    
    0
  13. THE GHOST
     
    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.
    0