php 2d массив … хранит результаты mysql в 2d массиве

#php

#php

Вопрос:

У меня есть оператор sql, который возвращает количество записей, каждая из которых имеет 10 атрибутов. Как я могу получить данные и поместить их в 2D массив. В настоящее время я делаю это :

 while($row1 = mysql_fetch_array($result1))
{
    echo $row1[0][1]; //There is an error here
}
  

Является ли $ row1 2D массивом? (Это должно быть потому, что я получаю n * m результатов). Если $ row1 является 2d-массивом, то разве я не должен иметь доступ к $row [0] [1]?

Комментарии:

1. что произойдет, если вы print_r в $row1?

Ответ №1:

массив mysql_fetch возвращает одномерный массив, объединяющий индексированные ключевые значения одной строки данных из результатов вашего запроса. например, выполнение

ВЫБЕРИТЕ field1, field2, field3 ИЗ sometable

и выполнение mysql_fetch_array для результата даст вам массив, который выглядит как:

 $row1 = array(
    0 => 'value of field1',
    1 => 'value of field2',
    2 => 'value of field3',
    'field1' => 'value of field1'
    'field2' => 'value of field2',
    'field3' => 'value of field3'
)
  

Если вы хотите обратиться ко всему результирующему набору как к одному массиву, вам придется сначала извлекать каждую строку и добавлять ее в этот массив:

 $data = array();
while($row1 = mysql_fetch_array($result)) {
    $data[] = $row1;
}
  

Что позволит вам сделать $data[0][1] (2-е поле [1] 1-й записи [0])

Ответ №2:

Из документов:

Извлеките строку результата в виде ассоциативного массива, числового массива или обоих

Если mysql_fetch_array восстанавливается 1 строка данных, каким вы ожидаете второе измерение?

Прежде всего вам нужно проверить, какой массив вы получаете, тогда вы сможете понять, почему ваши ключи недействительны. Попробуйте использовать print_r или var_dump для проверки $row1.

Ответ №3:

$row1 одновременно содержит только одну запись, поэтому это обычный одномерный массив.

Если ваш запрос возвращает

 a    b    c
d    e    f
  

На первой итерации цикла while row1 выполняется a b c , а на второй итерации выполняется d e f , оба одномерных массива.

Комментарии:

1. как я могу изменить его на 2d массив?

2. Смотрите Ответ Марка Б. О том, как превратить его в 2-D массив

Ответ №4:

$row1 — это одномерный массив (одна запись), в вашем случае содержащий 10 значений.

Поскольку код повторяет оператор while, $row1 представляет каждую запись.

обратитесь к документации здесь: http://ca.php.net/manual/en/function.mysql-fetch-array.php