2010-03-19 2 views
0

J'ai des données, oui, des données. Ces données proviennent d'une requête MySQL et il contiendra toujours 4 éléments, toujours. Je veux mettre en cache ces données dans une table de tableau pour les utiliser ultérieurement dans une page Web, mais je souhaite conserver les clés de la requête et séparer chaque regroupement dans un tableau multidimensionnel. Cependant, pour gagner du temps à parcourir le tableau chaque fois que je veux trouver un groupe donné de données, je veux appeler les touches du premier tableau de la même façon que la clé ID qui est toujours la première clé dans chaque élément.Comment nommer une clé de tableau avec une clé dans le tableau

À la minute où je suis en utilisant ce code:

function mysql_fetch_full_result_array($result) 
{ 
$table_result=array(); 
$r=0; 
while($row = mysql_fetch_assoc($result)){ 
    $arr_row=array(); 
    $c=0; 
    while ($c < mysql_num_fields($result)) {   
     $col = mysql_fetch_field($result, $c); 
     $arr_row[$col -> name] = $row[$col -> name];   
     $c++; 
    }  
    $table_result[$r] = $arr_row; 
    $r++; 
}  
return $table_result; 
} 

Je teste actuellement ce en utilisant 3 utilisateurs uniques, donc je me fais trois lignes en retrait de la requête et les données de cette fin de fonction dans le format:

[0]=> 
    . . [id] => 1  
    . . [name] => random name  
    . . [tel] => random tel 
    . . [post] => post code data 
    [1]=> 
    . . [id] => 34 
    . . [name] => random name  
    . . [tel] => random tel 
    . . [post] => post code data 
    [2]=> 
    . . [id] => 56 
    . . [name] => random name  
    . . [tel] => random tel 
    . . [post] => post code data 

Alors, comment puis-je modifier le code à la place des touches [0], [1], [2] me donner la sortie:

[1]=> 
    . . [id] => 1  
    . . [name] => random name  
    . . [tel] => random tel 
    . . [post] => post code data 
    [34]=> 
    . . [id] => 34 
    . . [name] => random name  
    . . [tel] => random tel 
    . . [post] => post code data 
    [56]=> 
    . . [id] => 56 
    . . [name] => random name  
    . . [tel] => random tel 
    . . [post] => post code data 

Je ne me dérange pas si les touches de tableau principal sont des chaînes de chiffres plutôt que des chiffres, mais je suis coincé, j'ai essayé de changer la partie $table_result[$r] = $arr_row; pour lire $table_result[$result['id']] = $arr_row; mais cela produit juste un tableau d'une personne. Je sais que j'ai besoin d'une autre boucle mais j'ai du mal à trouver comment l'écrire.

Répondre

0

Modifier la ligne:

$table_result[$r] = $arr_row; $r++; 
to 
$table_result[$arr_row['id']] = $arr_row; 

Et je ne pense pas que vous besoin de $ r plus.

+0

Cela a fonctionné à merveille, à votre santé! – Confused

0
$arr_row[(name of ID field in your result)][$col -> name] = $row[$col -> name] 

qui devrait constituer la clé de tableau comme ID, il devrait donc céder, par exemple:

$arr_row[34]['id'] = 34; 
$arr_row[34]['name'] = 'name'; 
$arr_row[34]['tel'] = 'tel'; 
$arr_row[34]['post'] = 'post'; 
0

Que diriez-vous:

$table_result = array(); 
$sql = "SELECT id, name, tel, post FROM sometable"; 
$res = mysql_query($sql); 
if (mysql_error()) { 
    die("MySQL error: " . mysql_error()); 
} 

while($row = mysql_fetch_array($res)) { 
    $table_result[$row['id']] = $row; 
} 

Si, comme vous le dites, ne vous dérange pas le champ d'identification se répète dans chaque élément de tableau, alors il n'y a pas besoin de boucler sur les lignes individuelles et les champs d'extraction.

+0

Et aussi, après avoir vu ce que cela produit beaucoup grâce à vous aussi! Il se peut que je doive réécrire certaines sections pour tirer parti de ce code beaucoup plus simple que d'utiliser l'ensemble de l'appel de fonction. – Confused

+0

Sérieusement que cette solution est géniale, je n'avais pas réalisé que l'ajout d'un tableau comme ça fonctionnerait, je regardais le code pendant la majeure partie de la nuit et je proposais des solutions toujours plus élaborées. Ayant juste adapté mon code pour l'utiliser, c'est beaucoup plus simple et cela évite toutes sortes de failles. Si je pouvais vous évaluer, je le ferais! – Confused

Questions connexes