Page 1 sur 1

probleme avec key()

Posté : 11 juil. 2007, 10:36
par risa83
Bonjour a tous et a toutes,

je travaillais sur 3 fichiers php différents concernant un affichage sous forme de tableau.
Dans un de ces fichiers j'utilisais la fonctin key() qui marchait parfaitement bien.
Malheureusement il fallait que j'intègre ces 3 fichiers en un seul et depuis cette fonction ne répond plus !!!

voici mon bout de code
//recupérer tous les moteurs de recherche du pack associé pour le positionnement en cours
$sql = "select distinct(CHAINEDERECHERCHE.ID_MOTEURDERECHERCHE), MOT_NOM, CHA_CHAINE from PACKPOSITIONNEMENT 
  inner join PACKREQUETE on PACKREQUETE.ID_PACKPOSITIONNEMENT=PACKPOSITIONNEMENT.ID_PACKPOSITIONNEMENT 
  inner join MOTEURDERECHERCHE on MOTEURDERECHERCHE.ID_MOTEURDERECHERCHE = PACKREQUETE.ID_MOTEURDERECHERCHE 
  inner join CHAINEDERECHERCHE on CHAINEDERECHERCHE.ID_MOTEURDERECHERCHE = MOTEURDERECHERCHE.ID_MOTEURDERECHERCHE
  where PACKPOSITIONNEMENT.ID_PACKPOSITiONNEMENT = " . $_GET['id'];
$rsbis = mssql_query($sql) or die(erreurSQL($sql)); 
while ($rowbis = @mssql_fetch_array($rsbis)){
  $tabMoteur[$rowbis['ID_MOTEURDERECHERCHE']] = array('MOT_NOM' => $rowbis['MOT_NOM'], 'CHA_CHAINE' => $rowbis['CHA_CHAINE']);
}
//recupere le premier moteur si aucun argument
if (!isset($_GET['idMoteur'])) {$_GET['idMoteur'] = key($tabMoteur) ;}
J'ai vérifié et le tableau $tabMoteur est correctement peuplé mais la fonction key() ne renvoie rien..
Je n'ai rien changé à ce bout de code.
Ce que je ne comprend pas c'est que key() fonctionnait très bien auparavant !!! :shock:

Quelqu'un sait d'ou cela peut venir ???

Posté : 11 juil. 2007, 10:51
par Hywan
Bonjour :)

Tu pourrais nous faire un var_dump sur $tabMoteur, et sur key($tabMoteur) ?

Posté : 11 juil. 2007, 10:55
par risa83
Bonjour :)

Tu pourrais nous faire un var_dump sur $tabMoteur, et sur key($tabMoteur) ?
voila ce que je trouve pour $tabMoteur

Code : Tout sélectionner

array(5) { [12]=> array(2) { ["MOT_NOM"]=> string(23) "AltaVista International" ["CHA_CHAINE"]=> string(76) "http://www.altavista.com/web/results?q=[search for this]&kgs=0&kls=0&stq=30 " } [15]=> array(2) { ["MOT_NOM"]=> string(10) "Google.com" ["CHA_CHAINE"]=> string(62) "http://www.google.com/search?hl=en&q=[search for this]&num=100" } [19]=> array(2) { ["MOT_NOM"]=> string(19) "Lycos International" ["CHA_CHAINE"]=> string(69) "http://search.lycos.com/default.asp?query=[search for this]&offset=90" } [26]=> array(2) { ["MOT_NOM"]=> string(17) "MSN International" ["CHA_CHAINE"]=> string(74) "http://search.msn.com/results.aspx?q=[search for this]&first=101&count=100" } [24]=> array(2) { ["MOT_NOM"]=> string(20) "Yahoo! International" ["CHA_CHAINE"]=> string(88) "http://search.yahoo.com/search?p=[search for this]&ei=UTF-8&fr=fp-tab-web-t&cop=mss&tab=" } }
et pour key($tabMoteur) : NULL

Posté : 11 juil. 2007, 11:23
par Ryle
Euh... et c'est quoi la valeur que tu vourdrais avoir à la place de NULL ?

Parce que je ne vois pas du tout ce que tu peux attendre d'autre de ce code.. tu n'es positionné sur aucun élément du tableau, j'ai du mal à imaginer comment key() pourrait te retourner un index, et surtout lequel elle pourrait te retourner :)

Posté : 11 juil. 2007, 11:26
par risa83
Euh... et c'est quoi la valeur que tu vourdrais avoir à la place de NULL ?

Parce que je ne vois pas du tout ce que tu peux attendre d'autre de ce code.. tu n'es positionné sur aucun élément du tableau, j'ai du mal à imaginer comment key() pourrait te retourner un index, et surtout lequel elle pourrait te retourner :)
J'aimerais avoir comme valeur 12 (la première clé du tableau)
Auparavant c'est la valeur qui m'était renvoyé :shock:

Si key() n'est pas la bonne fonction pour mon souhait, sais tu laquelle dois je utiliser?

Posté : 11 juil. 2007, 11:32
par Hywan
Chez moi, key($tabMoteur) me donne (int)12.

Tu le places où exactement dans ton code ?

Edit: sinon fait
reset($tabMoteur);
$var = key($tabMoteur);

Posté : 11 juil. 2007, 11:35
par Ryle
bah non, key() c'est bon, mais ca m'étonne qu'il ne faille pas un current() pour récupérer le premier élément du tableau pour que key puisse en déterminer la clé...

Posté : 11 juil. 2007, 11:38
par risa83
Chez moi, key($tabMoteur) me donne (int)12.

Tu le places où exactement dans ton code ?

Edit: sinon fait
reset($tabMoteur);
$var = key($tabMoteur);
Je le place à la fin de mon bout de code (après $_GET['idMoteur'] = key($tabMoteur) )

J'ai essayé avec reset et tou marche correctement !!!
MERCI :D

PS:
Ce que je ne comprend pas c'est qu'avant l'integration tout fonctionnait sans le reset!!!!

Posté : 11 juil. 2007, 11:49
par Hywan
@Ryle : key() retourne la clé courante du tableau. current() retourne la valeur courante du tableau.

Si key() retourne null, c'est qu'on est à la fin du tableau dans la majorité des cas. Comme risa83 voulait (int)12, ie. le premier ID, un reset s'imposait.

Edit : n'oublies pas de mettre ton poste en "Résolu" :)

Posté : 11 juil. 2007, 11:54
par Ryle
Au temps pour moi, c'est la notion de courrant qui m'avait échappé pour la fonction key, je pensais qu'il fallait d'abord sélectionner la valeur pour qu'il retourne la clé associé :)