2010-03-19 4 views
0

У меня есть данные, да, данные. Эти данные поступают из запроса MySQL и всегда будут содержать 4 элемента. Я хочу кэшировать эти данные в таблице массивов, которые будут использоваться позже на веб-странице, но я хочу сохранить ключи от запроса и выделить каждую группу в многомерном массиве. Однако, чтобы сэкономить время на итерацию через массив каждый раз, когда я хочу найти определенную группу данных, я хочу вызвать ключи первого массива так же, как и ключ 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

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

Это должно установить ключ массива в качестве идентификатора, поэтому он должен назначить, например:

$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

+0

Серьезно это решение гениально, я не понимал, что просто добавление такого массива будет работать, я долго смотрел на код большую часть ночи и придумывал все более сложные решения. Просто адаптировав мой код, чтобы использовать его, он намного проще и сохраняет всевозможные фальсификации. Если бы я мог оценить тебя, я бы! – Confused

Смежные вопросы