2010-03-19 229 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