2009-02-17 6 views
0

je le code suivant:Obtenez PHP clé du tableau assoc dans la boucle

while ($row = mysql_fetch_array($result, MYSQL_NUM)) 
    { 
     for ($i=0; $i<count($row); $i++) 
     { 
      (DO THING HERE) 
      $row[$i] = str_replace("\n", " ", $row[$i]); 
      $row[$i] = str_replace("\r", " ", $row[$i]); 
     } 

    } 

Je veux essentiellement à faire, si la clé de tableau associatif est égal à « e-mail » (donc $ row [ « email »]) puis ajoutez "@ gmail.com" à celui-ci.

Répondre

5

Voir le MYSQL_NUM vous y êtes? That is going to return your data using the column indexes as keys (ie 0, 1, 2, etc).

Vous devez soit

a) trouver l'index de colonne le champ email est et faire:

while ($row = mysql_fetch_array($result, MYSQL_NUM)) 
{ 
    // 'email' is in column number 5 
    $row[5] .='@gmail.com'; 

    for ($i=0; $i<count($row); $i++) 
    { 
     $row[$i] = str_replace("\n", " ", $row[$i]); 
     $row[$i] = str_replace("\r", " ", $row[$i]); 
    } 
} 

b) ou vous pouvez changer MYSQL_NUM-MYSQL_ASSOC, et faire:

while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) 
{ 
    $row['email'] .='@gmail.com'; 

    foreach($row as &$value) 
    { 
     $value = str_replace("\n", " ", $value); 
     $value = str_replace("\r", " ", $value); 
    } 
} 

Notez le "&" avant $value pour en faire une référence.

je ferais ce dernier (je préfère foreach à for :)

+0

façon de mordre complètement ma réponse bro. Je demande la moitié de votre représentant –

+0

@theman: cette implémentation SO "heartbeat" est boguée. Je n'ai même pas vu ta réponse pendant que j'écrivais la mienne. –

+0

crescentfresh, j'ai vu votre premier commentaire à moi, tout est bon, vous avez mieux écrit votre réponse, je plaisantais tout le temps –

0

Je ne sais pas si cela est exactement ce que vous voulez, mais:

$row['email'].='@gmail.com'; 

Ceci ajoutera @ gmail.com à la ligne e-mail.

5

Utilisez une boucle foreach et obtenez à la fois la clé et la valeur du tableau assoc.

foreach($row as $key => &$value) 
{ 
    if($key == 'email') $value .= "@gmail.com"; 
} 

Aussi, vous devez utiliser mysql_fetch_array($result, MYSQL_ASSOC) si vous voulez un tableau associatif retourné.

Une façon plus efficace pour ajouter à la clé e-mail serait quelque chose comme:

if(isset($row['email'])) 
    $row['email'] .= '@gmail.com'; 

lieu de boucle à travers toutes les colonnes.

+0

est non seulement inefficace, c'est aussi faux. Il lui a transmis la constante MYSQL_NUM, donc il n'y a pas de clés associatives. merci –

+0

mysql_fetch_assoc() récupère également les tableaux associatifs –

+0

n'auriez-vous pas besoin d'obtenir $ value par référence si vous allez le changer? c'est-à-dire foreach ($ row comme $ key => & $ value) –

1

Paulo avait presque exactement droite:

while ($row = mysql_fetch_assoc($result)) { 
    foreach($row as $key => &$value) { 
     if($key == 'email') $value .= '@gmail.com'; 
     $value = str_replace("\n", " ", $value); 
     $value = str_replace("\r", " ", $value); 
    } 
} 

Notez le "&" dans la ligne foreach. Cela signifie que vous modifiez la valeur dans le tableau $row, pas seulement une copie de celui-ci.

Questions connexes