[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Многоуровневый массив
Quieteroks
Здравствуйте.

Сейчас передо мной стал такой вопрос:
Я получаю из MySQL две таблицы, которые в последствии я связываю по id номеру этих строк.
Запрашиваю именно в два запроса, поскольку данные в первом случае хранятся как одна строка, во втором случае как таблица...

После чего я делаю два массива, первый по строке, второй по таблице для сбора этих данных.
Наглядно - первый массив генерирует такой массив:

Array
(
[
142] => Array(
[
val] => 14
[maxval] => 0
)
[
324] => Array(
[
val] => 5
[maxval] => 0
)
[
242] => Array(
[
val] => 16
[maxval] => 0
)
)



Второй по id заполняет значение maxval.
И тут стал вопрос, а что если для значения maxval вернется две строки с одинаковым id... Одна строка теряется. Затираясь новыми значениями.
Решил попробовать id вынести из ключа массива, но как тогда обратиться к id массива, если по сути я знаю только порядок строк...


Array
(
[
0] => Array(
[
id] => 142
[val] => 14
[maxval] => 0
)
[
1] => Array(
[
id] => 324
[val] => 5
[maxval] => 0
)
[
2] => Array(
[
id] => 242
[val] => 16
[maxval] => 0
)
)



Можно создать второй массив, который будет содержать id как ключ и ключ первого массива в качестве аргумента для доступа к нему.
А как обработать далее? Что делать, когда вторая таблица вернет два одинаковых id?
Нужно как то сохранить две дополнительные строки...
Может я не правильно подошел к созданию массива и было бы проще как то по другому организовать?



Спустя 8 минут, 49 секунд (9.02.2012 - 15:47) Invis1ble написал(а):
Цитата
И тут стал вопрос, а что если для значения maxval вернется две строки с одинаковым id... Одна строка теряется. Затираясь новыми значениями.

maxval сделай массивом (если я конечно правильно понял задачу)
[142] => Array(
[val] => 14
[maxval] => array(0, ...)
)

Спустя 24 минуты, 9 секунд (9.02.2012 - 16:11) Quieteroks написал(а):
Цитата (Invis1ble @ 9.02.2012 - 12:47)
Цитата
И тут стал вопрос, а что если для значения maxval вернется две строки с одинаковым id... Одна строка теряется. Затираясь новыми значениями.

maxval сделай массивом (если я конечно правильно понял задачу)
[142] => Array(
[val] => 14
[maxval] => array(0, ...)
)

Я для примера только три поля показал. Там есть еще поля... И возможно будут расширяться.

Все повторно встречаемые поля сделать еще раз массивом?
А потом дополнительно проверять is_array при анализе полученного массива?

Спустя 5 минут, 32 секунды (9.02.2012 - 16:17) Invis1ble написал(а):
Цитата
Все повторно встречаемые поля сделать еще раз массивом?

ага, типа того
Цитата
А потом дополнительно проверять is_array при анализе полученного массива?

ну это уже зависит от задач.
Делай массивом независимо от кол-ва элементов, чтоб опустить необходимость проверки is_array()

Спустя 4 минуты, 51 секунда (9.02.2012 - 16:22) Quieteroks написал(а):
Цитата
Делай массивом независимо от кол-ва элементов, чтоб опустить необходимость проверки is_array()


В этом случае будут еще циклы внутри цикла, дабы проанализировать строки.
Что тогда быстрее получится? Проверка или цикл?

В общем советуете расширять массив подмассивами при подобных дилеммах?

Спустя 7 минут, 17 секунд (9.02.2012 - 16:29) Invis1ble написал(а):
Цитата
В общем советуете расширять массив подмассивами при подобных дилеммах?

А как по-другому? По-другому костыли получатся

Спустя 21 минута, 45 секунд (9.02.2012 - 16:51) Quieteroks написал(а):
Invis1ble

Хорошо, буду пробовать.
Спасибо за совет.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.