2010-03-19 188 views
0

我有一些数据,是的,数据。该数据来自MySQL查询,并且始终包含4个项目。我想将这些数据缓存在一个数组表中以供稍后在网页中使用,但我想保留查询中的键并将每个分组分离到多维数组中。但是,为了节省每次我想要查找给定数据组的迭代通过数组的时间,我想调用第一个数组的键与ID键相同,ID键始终是每个四项中的第一个键。如何使用阵列中的密钥命名阵列密钥

在分钟,我用这个代码:

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; 
} 

我目前正在测试这种使用3个独特的用户,所以我越来越从查询三行回来,从这个函数结束数据达格式为:

[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 

那么,如何改变代码来代替键[0],[1],[2]给我的输出:

[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 

我不介意如果主数组键是数字串而不是数字,但我有点卡住了,我试着改变$table_result[$r] = $arr_row;部分来读$table_result[$result['id']] = $arr_row;,但只输出一个人的数组。我知道我需要另一个循环,但我正在努力研究如何编写它。

回答

0

更改行:

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

而且我不认为你再需要$ r。

+0

奇妙的是,欢呼! – Confused 2010-03-19 14:59:48

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

这应该设置你的数组键作为ID,所以应该分配,例如:

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

如何:

$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; 
} 

如果像你说的,你不介意被重复每个数组元素中的ID字段,那么就没有必要遍历各行和提取物领域。

+0

而且,刚刚看过这个输出也非常感谢你!我可能需要重写一些部分,以利用这个更简单的代码,而不是使用整个函数调用。 – Confused 2010-03-19 15:24:22

+0

认真的说,解决方案是天才,我没有意识到只要添加一个这样的数组就可以工作,我一直盯着大部分时间的代码,并提出更详尽的解决方案。刚刚适应我的代码使用它,这是更简单,并保存各种各样的faffing。如果我能评价你我会的! – Confused 2010-03-19 15:31:52