IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

probleme de tableau array avec la fonction array_push()


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 329
    Points : 126
    Points
    126
    Par défaut probleme de tableau array avec la fonction array_push()
    Bonjour

    J'ai trois lignes dans une base de donnée

    Actuellement j'utilise cette méthode pour mettre les données dans un tableau array()


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    $sql=mysql_query("SELECT a,b,c,d,e FROM test");
    $z=0;
    $va=array();
    while($rs=mysql_fetch_object($sql)){
    			$va[$z][0]=$rs->a;
    			$va[$z][1]=$rs->b;
    			$va[$z][2]=$rs->c;
    			$va[$z][3]=$rs->d;
    			$va[$z][4]=$rs->e;
    			$z++;
                                       }
    print_r($va);
     
    // affichage
     
    //Array ( [0] => Array ( [0] => 1 [1] => 1 [2] =>2 [3] => Vente [4] => 0 ) 
    //        [1] => Array ( [0] => 1 [1] => 1 [2] =>2 [3] => Location [4] => 0 )
    //        [2] => Array ( [0] => 1 [1] => 1 [2] =>2 [3] => Achat [4] => 0 )
    Mon problème est que je n'arrive pas faire la même chose avec la fonction array_push()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    $sql=mysql_query("SELECT * FROM test");
    $vil=array();
    $z=0;
    while($rs= mysql_fetch_object ($sql)) {
    array_push($vil,$vil[$z][0]=$rs->a,$vil[$z][1]=$rs->b,$vil[$z][2]=$rs->c,$vil[$z][3]=$rs->d,$vil[$z][4]=$rs->e);
                                      $z++;
                                          }
    print_r($vil);
     
    //Affichage
     
    //Array ( [0] => Array ( [0] => 1 [1] =>1 [2] =>2 [3] =>Vente [4] => 0 ) 
    //        [1] => 1���0 
    //        [2] => Array ( [0] => 1 [1] =>1 [2] =>2 [3] =>Achat [4] => 0 )
    Donc je n'arrive pas à obtenir le même tableau.

    Que faut-il faire pour corriger cela.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Je ferrais plutot ça en laissant tomber le $z :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while($rs= mysql_fetch_object ($sql)) {
    $vil[] = array($rs->a,$rs->b,$rs->c,$rs->d,$rs->e);
    }
    print_r($vil);

  3. #3
    Membre actif Avatar de bigltnt
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    227
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 227
    Points : 205
    Points
    205
    Par défaut
    La fonction array_push() prend des tableaux en paramètres. Pour commencer, il n'est pas permit de faire une assignation dans le passage des paramètres:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    array_push( $vil, $vil[$z][0]=$rs->a, [...] )
    Vu ce que j'ai l'impression que tu essayes de faire, je pense que simplement ceci devrait suffir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <?php
    	$sql = mysql_query( "SELECT * FROM test" );
    	$vil = array();
    	while( $rs = mysql_fetch_array( $sql ) ) {
    		$vil[] = $rs;
    	}
    	print_r($vil);
    ?>
    Je vois pas pourquoi tu tiens à utiliser la fonction array_push() qui ne me parait pas bien utile pour ton cas.

    Cordialement

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 329
    Points : 126
    Points
    126
    Par défaut rep
    Merci cela fonctionne, j'avais vu trop compliqué.

    A par contre est-il possible de commencer l'ajout de lignes à partir d'une numérotation voulu ?

    Actuellement dans le tableau array() ci-dessus c'est :
    // [0]=>1 , [1]=>2 ...
    Peut-on commencer par un chiffre voulu ?
    // [10]=> , [11]=>2 ...

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Points : 822
    Points
    822
    Par défaut
    Dans ce cas il faut récupérer le $z :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $sql = mysql_query( "SELECT * FROM test" );
    	$vil = array();
            $z=10
    	while( $rs = mysql_fetch_array( $sql ) ) {
    		$vil[ $z++ ] = $rs; //dans le cas présent, le $z est affecté puis incrémenté
    	}
    	print_r($vil);

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 329
    Points : 126
    Points
    126
    Par défaut
    cool c'est bien pour les lignes. je ne le savais pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $sql = mysql_query( "SELECT * FROM test" );
    	$vil = array();
            $z=10;
    	while( $rs = mysql_fetch_array( $sql ) ) {
    		$vil[ $z++ ] = $rs; //dans le cas présent, le $z est affecté puis incrémenté
    	}
    	print_r($vil);
    Mais ma demande était pour introduire le paramètre dans chaque valeur introduite dans le tableau

    exemple
    // $y=139
    // $z=10

    //ligne 10 ---> [139] =valeur a, [140]= valeur b .....$y++

    j'arrive pas à mettre le y++ dans

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $vil[ $z++ ] = $rs
    // j'essayé $vil[ $z++ ] = $rs[$y++] . cela ne fonctionne pas
    en fait c'est pour réaliser un tableau comme cela

    Array ( [10] => Array ( [139] => 1 [140] => [141] =>1 [142] => 2 [143] => Vente.)
    [11] => Array ( [139] => 1 [140] => [141] =>1 [142] => 2 [143] => Location.)
    [12] => Array ( [139] => 1 [140] => [141] =>1 [142] => 2 [143] => Achat. )

    Si c'est possible ?

  7. #7
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Pas très élégant mais bon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    $sql = mysql_query( "SELECT * FROM test" );
    	$vil = array();
            $z=10;
            $y = 139;
    	while( $rs = mysql_fetch_array( $sql ) ) {
    		$vil[$z] = array(
            $y=>$rs->a,
            $y+1$rs->b,
            $y+2=>$rs->c,
            $y+3=>$rs->d,
            $y+4=>$rs->e);
     
    $z++;
    	}
    	print_r($vil);
    ou avec deux boucles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $sql = mysql_query( "SELECT * FROM test" );
    	$vil = array();
            $z=10;
     
    	while( $rs = mysql_fetch_array( $sql ) ) {
               $y = 139;
               foreach ($rs as $value) {
                    $vil[$z][$y] = $value;
                    $y++;
               }
             $z++;
    	}
    	print_r($vil);

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 329
    Points : 126
    Points
    126
    Par défaut rep
    La méthode avec deux boucles est bonne par contre le seul problème, c'est au lieu d'avoir 4 valeurs par lignes, j'en ai 12. les 4 valeurs sont répéter en triple. J'ai cherché un moyen ou une fonction pour ne pas avoir de triplon sans succès.

    j ai tenté de faire même un boucle for avec une limite de 4. et la cela ne fonctionne pas.

    j ai tenté array_unique() , ben la sur les 10 lignes j en ai plus que une

    Je suis à cour d'idée

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Points : 822
    Points
    822
    Par défaut
    mysql_fetch_array retourne un tableau avec index numérique et un alias associatif (par contre pour le 3eme, pas d'idée)
    => remplacer mysql_fetch_array() par mysql_fetch_row() par exemple.

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 329
    Points : 126
    Points
    126
    Par défaut
    cette méthode fonctionne mais le problème c'est qu'il faut rentrer les numéros et les champs en manuel donc pas cool

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $sql=mysql_query("SELECT * FROM test");
    $z=0;
    $vil=array();
    for($$z=0;$z<=10;$z++){
    while($rs=mysql_fetch_object ($sql)) {
    $vil[$z]=array(139=>$rs->a,140=>$rs->b,141=>$rs->c,142=>$rs->d,143=>e);$z++;
                                          }
                             }
    c'est dommage que l'on ne puis pas le faire avec celle la

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $sql = mysql_query( "SELECT * FROM test" );
    	$vil = array();
            $z=10
    	while( $rs = mysql_fetch_array( $sql ) ) {
    		$vil[ $z++ ] = $rs; //dans le cas présent, le $z est affecté puis incrémenté
    	}
    	print_r($vil);
    J ai teste mysql_fetch_rows() sans succès aussi

    C'est peut être impossible à faire .

  11. #11
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Et ce que j'ai proposé avec le correction de Petibidon ca ne te convient pas ?

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Points : 822
    Points
    822
    Par défaut
    Toujours pas compris l'intérêt fonctionnel de ce truc mais bon, on va essayer d'insister pour le fun

    Si l'on considère que la requête envoie bien 5 champs (sinon plouf) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $sql = mysql_query( "SELECT * FROM test" );
    	$vil = array();
            $z=10;
            $keys = range( 139 , 143 ); //crée un tableau array( 139 , 140 ... 143 )
    	while( $rs = mysql_fetch_row( $sql ) ) {
    		$vil[ $z++ ] = array_combine( $keys , $rs ); 
    	}
    	print_r($vil);
    code non testé.

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 329
    Points : 126
    Points
    126
    Par défaut rep
    cela me convient mais dès que j'ai vu que l'on pouvait le faire sans mettre en dur toutes les lignes le code si dessus cela m'a plus

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    139=>$rs->a,140=>$rs->b,141=>$rs->c,142=>$rs->d,143=>e
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $vil[ $z++ ] = $rs;
    J'ai essayé de bidouiller en faisant un mix. mais rien ne marche.

    Je pense que l'on ne peut faire qu'une méthode. Celle du foreach est pas mal, mais elle a un inconvénient c'est qu'elle triple les valeurs de chaque lignes du tableau

  14. #14
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 329
    Points : 126
    Points
    126
    Par défaut rep
    WOW La methode array_combine() fonctionne bien.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 19/05/2013, 16h22
  2. [XL-2010] Comment prendre en compte un tableau (Array) dans une fonction vba?
    Par statista dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 07/04/2011, 15h16
  3. Réponses: 6
    Dernier message: 09/03/2011, 11h43
  4. [JavaScript] [SRC] array_map() modification de tous les elements d'un array avec une fonction
    Par SpaceFrog dans le forum Contribuez
    Réponses: 0
    Dernier message: 08/07/2009, 13h28
  5. [PHP 4] session et tableau array avec 4 colonnes
    Par sooprano dans le forum Langage
    Réponses: 1
    Dernier message: 30/06/2009, 13h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo