[RESOLU] Petit problème avec : Array_push & clé => valeur

Eléphanteau du PHP | 16 Messages

20 oct. 2016, 16:42

Bonjour,
Je rencontre un problème qui ne gène pas le fonctionnement mais qui est assez dérangeant.
Je vous montre mon code et ensuite j'explique :
D'un coté ma classe Utilisateur

Code : Tout sélectionner

class Utilisateur{ public function donneesUtilisateur($id_u, $db) { $results = mysqli_query($db, 'SELECT u.* FROM utilisateur AS u WHERE id ='.$id_u); $this->donnees_u = array(); foreach($results AS $key => $value){ array_push($this->donnees_u, $this->donnees_u[$key] = $value); } //Penser a utiliser => donnees_u[0][id] } }
De l'autre l'affichage des données :

Code : Tout sélectionner

$detailUser = new Utilisateur; $detailUser->donneesUtilisateur($idu,$connect); $tableau_utilisateur = $detailUser->donnees_u[0]; foreach($tableau_utilisateur AS $key => $value) { echo ($key.' --> '.$value.'<br />'); }
Donc mon petit soucis c'est qu'avec ma façon de faire , je me retrouve avec un tableau multidimentionnel alors qu'un simple tableau m'aurait suffit.
Je pense que mon utilisation de Array_push est mauvaise mais je tourne en rond depuis un bon moment sans trouver d'autre solution.
Merci d'avance pour votre aide
Cordialement

Mammouth du PHP | 1967 Messages

20 oct. 2016, 18:11

ton code est très bizarre, je m'étonne même que tu arrive à avoir ce que tu désire.

array_push n'est pas en cause, mais cette ligne est la plus bizarre
array_push($this->donnees_u, $this->donnees_u[$key] = $value);
cela signifie qu'a chaque itération, tu attribue à ton tableau la valeur $value à la clé $key et comme cet attribution est correcte, tu ajoute aussi à la fin de ton tableau un TRUE.

donc il est important de comprendre ce que tu voudrais avoir dans ce tableau, mais je penserais peut être à un truc comme cela
array_push($this->donnees_u, $key." = ".$value);
ou
$this->donnees_u[$key] = $value;
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphanteau du PHP | 16 Messages

21 oct. 2016, 10:34

Bonjour,
Merci de t'intéresser a ce soucis, alors :
Si j'ai bien compris le array_push en vert je met mon tableau, en rouge ma clef et en bleue la valeur qu'elle va avoir.
array_push($this->donnees_u, $this->donnees_u[$key] = $value);
Ce qui est exactement ce que j'attends de cette action. Le soucis que je rencontre c'est que j'obtient ce genre de chose :
array('0'=>array('key1'=>value1,'key2'=>value2...))
je ne récupère qu'une ligne de ma base de donnée et il me cré un tableau imbriqué comme si il allait récupérer plusieurs lignes.
--------------------------------------------------------------
J'ai donc testé tes propositions Spols et aucune ne fonctionne malheureusement.
-------------------------------------------------------------
Je vais donc essayer de réexpliquer autrement ce que je veux modifier :
Je souhaite récupérer un ligne de ma base de donnée dans un tableau avec le nom de la colonne en KEY et sa valeur en VALUE.
En gros c'est ce que donne mon code mais en ayant un tableau imbriqué. Je suis obligé de coder $detailOm->donnees_om[0][KEY] pour obtenir sa VALUE.

Si quelqu'un a une idée ou une explication sur mon erreur , je suis prêt à apprendre :D .

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

21 oct. 2016, 11:19

c'est un peu con mais c'est ce que mysqli_fethc_assoc fait http://php.net/manual/fr/mysqli-result.fetch-assoc.php

du coup
<?php
$data = mysqli_fetch_assoc($results);
sinon au pire avec ton code
<?php

public function donneesUtilisateur($id_u, $db) {
     $results = mysqli_query($db, 'SELECT u.*  FROM utilisateur AS u WHERE id ='.$id_u);
    $data = [];
     foreach($results AS $key => $value){
        $data[$key] = $value;
     }
     // important
     mysqli_free_result($results);
   }
bon après tu le met sur un propriété de l'objet si tu le souhaites.

pour le coté objet c'est moyen ce que fait, il faudrait un assesseur qui retourne le tableau.

de plus, si veux respecter les bonnes pratiques l’utilisation du _ est proscrite pour les propriétés qui ne sont pas des constantes ;)

=> voir psr1 et 2.


@+
Il en faut peu pour être heureux ......

Mammouth du PHP | 1967 Messages

21 oct. 2016, 11:22

array_push ne fonctionne pas comme cela,
http://php.net/array_push
array_push ne permet pas de mettre un index personalisé.
en plus, tu met dans ta fonction un égal qui n'a rien à faire là, c'est une virgule qu'il te faudrai
class Utilisateur{
   public function donneesUtilisateur($id_u, $db) {
      $results = mysqli_query($db, 'SELECT u.*  FROM utilisateur AS u WHERE id ='.$id_u);
      $this->donnees_u = array();
      foreach($results AS $key => $value){
         $this->donnees_u[$key] = $value;
      }
    }
}
Que te donnes le tableau avec ce bout de code ?
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphanteau du PHP | 16 Messages

21 oct. 2016, 12:29

Spols , en utilisant ton bout de code j'ai exactement le même problème avec l'index [0] => array :
Array ( [0] => Array ( [id] => 110 [date_crea] => 2016-10-17 [id_user] => 25 [date_depart] => 2016-10-02 [heure_depart] => 08:30:00...)

Par contre j'ai ma virgule qui sépare mon 1er argument ( le tableau ) et le reste, y'a pas de rapport avec le '=' ? si ?
array_push($this->donnees_u, $this->donnees_u[$key] = $value);
Quoi qu'il en soit , je vais mettre résolut puisque Moogli m'a apporté la solution.
je ne savais pas qu'on pouvait directement passé la requête avec

Code : Tout sélectionner

$this->donnees_u = mysqli_fetch_assoc($results);
j'utilisais mysqli_fetch_assoc dans un while jusqu'à maintenant...
J'ai donc mon jolis tableau tout propre ( Array ( [id] => 110 [date_crea] => 2016-10-17 [id_user] => 25 [date_depart] => 2016-10-02 [heure_depart] => 08:30:00 ...) et je peux avancer.
Encore merci à vous deux pour votre aide.