convert. array numérique en clé primaire-valeur from MySQL?

convert. array numérique en clé primaire-valeur from MySQL? - PHP - Programmation

Marsh Posté le 19-03-2004 à 09:36:47    

salut,
 
j'obtiens via mysql_fetch_row des tableaux de la forme :
 
tab[0]=clé primaire de la table
tab[1]=colonne de la table
 
Je voudrais convertir en  
 
tab[clé primaire]=colonne
 
Comment?

Reply

Marsh Posté le 19-03-2004 à 09:36:47   

Reply

Marsh Posté le 19-03-2004 à 09:43:05    

tu peux faire ça :
 
$tab2[$tab[0]] = $tab[1];
 
T'es sur que c'est ce que tu veux faire ? Et pas plutot utiliser mysql_fetch_assoc au lieu de mysql_fetch_row ?

Reply

Marsh Posté le 19-03-2004 à 10:10:14    

la honte :sweat:
Il y a des fois je sais pas à quoi je reflechis...
 
l'idée c'est ça :
 
une fonction pour faire des listBox html

Code :
  1. function ListBox($valeurs,$index,$nom)
  2. {
  3.  $res="\n<select name=\"$nom\">";
  4.  reset($valeurs);
  5.  while (!is_null($key=key($valeurs)))
  6.  {
  7.   if ($key==$index) $select=' selected=selected';
  8.   else $select='';
  9.   $res.="\n\t<option value=\"".$key."\"".$select.">$valeurs[$key]</option>";
  10.   next($valeurs);
  11.  }
  12.  $res.="\n</select>";
  13.  return $res;
  14. }


 
 
ça c'est général c'est dans mes 'outils'.
 
Ensuite je developpe une interface pour le projet actuel :
cad que le tableau a passer c'est issu de Mysql.
 
soit ma fonction d'interface :

Code :
  1. function SelectUserLevel($db, $index)
  2. {
  3.  $sql='select
  4.  userlevel_num,
  5.  userlevel_nom
  6.  from userlevel';
  7.  $res=execRqt($sql,$db);
  8.  while($myrow=LigneSuivante($res))
  9.  {
  10.   $tab[$myrow[0]]=$myrow[1];
  11.  }
  12.  return ListBox($tab,$index,'lb_userlevel');
  13. }


 
Correct?
 
élégant?

Reply

Marsh Posté le 19-03-2004 à 10:23:09    

Voici les modifications que j'apporterais :D
 
une fonction pour faire des listBox html

Code :
  1. function ListBox($valeurs,$index,$nom) {
  2.     $res="\n<select name=\"$nom\">";
  3.     foreach( $valeurs as $key => $valeur) {
  4.        $select = ($key==$index) ? ' selected=selected' : '';
  5.       $res.="\n\t<option value=\"".$key."\"".$select.">$valeur</option>";
  6.     }
  7.     $res.="\n</select>";
  8.     return $res;
  9. }


 
fonction d'interface :

Code :
  1. function SelectUserLevel($db, $index) {
  2.     $sql='select
  3.     userlevel_num,
  4.     userlevel_nom
  5.     from userlevel';
  6.     $res=execRqt($sql,$db);
  7.     while($myrow=LigneSuivante($res)) {
  8.         $tab[$myrow[0]]=$myrow[1];
  9.     }
  10.     return ListBox($tab,$index,'lb_userlevel');
  11. }

Reply

Marsh Posté le 19-03-2004 à 10:50:34    

merci ;)
 
le foreach est il plus rapide / adapté?
 
par contre je n'ai pas compris ça :
$select = ($key==$index) ? ' selected=selected' : '';  
 
Peux tu me l'expliquer?
Merci.

Reply

Marsh Posté le 19-03-2004 à 11:05:06    

C'est l'opérateur ternaire (":?" ), qui fonctionne comme en langage C.  
 
 

Code :
  1. <?php
  2. // Exemple d'utilisation pour l'opérateur ternaire
  3. $action = (empty($_POST['action'])) ? 'default' : $_POST['action'];
  4. // L'expression ci-dessus est identique à  
  5. if (empty($_POST['action'])) {
  6.    $action = 'default';
  7. } else {
  8.    $action = $_POST['action'];
  9. }
  10. ?>


 
L'expression (expr1) ? (expr2) : (expr3) renvoie la valeur de l'expression expr2 si l'expression expr1 est vraie, et l'expression expr3 si l'expression expr1 est fausse.  
 
 
Copier/coller de http://www.php.net/manual/fr/langu [...] arison.php


Message édité par ratibus le 19-03-2004 à 11:05:28
Reply

Marsh Posté le 19-03-2004 à 11:13:57    

http://www.blueshoes.org/phpBench.php
 
Le bench est fait avec de gros tableaux, il ne tient qu'à toi de tester toi-même le temps avec le foreach et avec le while :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed