如何使用数组内的键命名数组键

时间:2010-03-19 14:46:37

标签: php arrays

我有一些数据,是的,数据。这些数据来自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;但是只输出一个一个人的阵列。我知道我需要另一个循环,但我很难弄清楚如何编写它。

3 个答案:

答案 0 :(得分: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';

答案 1 :(得分:0)

更改行:

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

我认为你不再需要$ r了。

答案 2 :(得分: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字段,那么就不需要遍历各个行并提取字段。