Array et chaine

Eléphant du PHP | 424 Messages

29 févr. 2012, 13:38

Bonjour,

J'extrait de ma Base de données les id de mes enregistrements selon un critère.
Cela me donne donc tous les id de ma table sous forme de chaîne. Par exemple : 41424344

Je souhaite insérer une virgule entre chaque id pour obtenir 41,42,43,44.
J'ai essayé la fonction implode sans succès, un foreach sans succès également...

Que faut il faire pour réussir ?

Merci d'avance.
$id_v = $_GET['id_v'];
$sqldip = 'SELECT * FROM tb_garanties WHERE contrat_id = '.$_GET['id_v'];
   // $nbsql += 1;
	if ($resselectdip = mysql_query($sqldip)) {
         while ($selectdip = mysql_fetch_array($resselectdip))
         {
		$temp = array($selectdip["id_garantie"]);
		$imp = implode(",",$temp);
	}
} ?>
Youpi Youpi Yo !

Eléphant du PHP | 179 Messages

29 févr. 2012, 13:42

Implode passe un tableau en chaine avec séparateur entre chaque case, la tu n'as qu'une case dans ton tableau, donc normal qu'il ne fasse rien, donc c'est normal que ça ne fonctionne pas
$temp=array();
while ($selectdip = mysql_fetch_array($resselectdip))
         {
                $temp[] = $selectdip["id_garantie"];
               
        } 
$imp = implode(",",$temp);
Si tu tiens a utiliser le implode :p

Eléphant du PHP | 424 Messages

29 févr. 2012, 13:51

Pourquoi il y'a une autre solution que implod ?
ça m’intéresse !!

Merci pour ton aide.
Youpi Youpi Yo !

Mammouth du PHP | 2278 Messages

29 févr. 2012, 13:57

$id_v = $_GET['id_v'];
$sqldip = 'SELECT * FROM tb_garanties WHERE contrat_id = '.$_GET['id_v'];
   // $nbsql += 1;
        if ($resselectdip = mysql_query($sqldip)) {
         while ($selectdip = mysql_fetch_array($resselectdip))
         {
                $temp = array($selectdip["id_garantie"]);
                $imp = implode(",",$temp);
        }
} ?>
1) Déjà si le même nom de variable ne servait pas à 36 trucs différents le code serait plus lisible et plus cohérent ( Note aux experts: Oui, je sais qu'une variable peut être redéfinie, et que PHP n'étant pas typé, la variable peut changer de type).
2a) Chaque temp n'est pas le moins du monde une chaîne, mais un tableau, et vu comment tu t'en sers, il suffirait d'écrire:
while ($selectdip = mysql_fetch_array($resselectdip, MYSQL_ASSOC)).
2b) Je doute que cette syntaxe soit bien utile:
$temp = array($selectdip["id_garantie"]);
2b1) ceci renseignerait efficacement:
$temp = array($selectdip["id_garantie"]); print_r($temp);
2b2) quant à moi je m'en tiendrais à:
$temp = $selectdip["id_garantie"];
en suivant:
http://fr2.php.net/manual/fr/function.m ... -array.php

Menfin, je suis un sous-doué du PHP, alors peut-être me gouré-je.
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphant du PHP | 179 Messages

29 févr. 2012, 14:10

Pourquoi il y'a une autre solution que implod ?
ça m’intéresse !!

Merci pour ton aide.
Fais marcher ton imagination, mais moi j'aurais utilisé implode aussi ^^
Je disais ça comme ça !

$temp.= $selectdip["id_garantie"].',';

des trucs du genre mais bon :)

Eléphant du PHP | 275 Messages

29 févr. 2012, 15:05

$temp = array();
 while ($selectdip = mysql_fetch_array($resselectdip))
 {
     $temp[] = $selectdip["id_garantie"];
}
$imp = implode(",",$temp);
Mais c'est vrai que c'est chaud, faut reflechir.

Eléphant du PHP | 179 Messages

29 févr. 2012, 15:36

Implode passe un tableau en chaine avec séparateur entre chaque case, la tu n'as qu'une case dans ton tableau, donc normal qu'il ne fasse rien, donc c'est normal que ça ne fonctionne pas
$temp=array();
while ($selectdip = mysql_fetch_array($resselectdip))
         {
                $temp[] = $selectdip["id_garantie"];
               
        } 
$imp = implode(",",$temp);
Si tu tiens a utiliser le implode :p
$temp = array();
 while ($selectdip = mysql_fetch_array($resselectdip))
 {
     $temp[] = $selectdip["id_garantie"];
}
$imp = implode(",",$temp);


Mais c'est vrai que c'est chaud, faut reflechir.
ok ^o)

Mammouth du PHP | 2278 Messages

29 févr. 2012, 15:47

Reprenons depuis le départ, car, apparemment, personne ne parle de la même chose.
1) Dans la BDD, à chaque enregistrement, il y a plusieurs champs: lesquels?
2) Ce que tu souhaites, c'est :
a) obtenir, pour chaque enregistrement, une chaîne regroupant tous les champs le concernant.
b) obtenir un tableau où, pour chaque enregistrement, existe une ligne contenant, une chaîne regroupant tous les champs le concernant.
c) obtenir une chaîne contenant tous les champs de tous les utilisateurs.
?
À partir de là, on peut réfléchir utilement.
Oui, de toute façon, il y a une histoire d'implode là-dedans, mais tout dépend de ce que tu veux obtenir.
Je répète qu'il serait utile de passer par :
            $temp = $selectdip["id_garantie"]; print_r($temp);
et non par:
            $temp = array($selectdip["id_garantie"]);
comme tu fais.
Essaie donc sur ton code
            $temp = array($selectdip["id_garantie"]);print_r($temp);
au lieu de bidouiller dans tous les sens.
L'informatique est d'abord question de clarification de ce qu'on veut avant d'être une question de grammaire, comme d'ailleurs tout langage, formel ou non.
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD