[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Вывод подкатегорий.
Bezdna
Довольно длительное время не брал в руки Нотепад+ biggrin.gif , а тут появилось необходимость, а вместе с ней и всякие загвоздки. Одна из них:

Есть две таблицы - houses с полями id, adress и apartaments с полями a_id, number, uniq_id, связанные соответствующими значениями id и uniq_id. Нужно вывести список в формате:

Дом1
Квартира 1
Квартира 2
Квартира 5
Дом2
Квартира 1
Квартира 4
Квартира 15
и т.д.

За двое суток бумагомарания, ковыряния Гугла и выдавливания из себя нескольких сотен строк говнокода с намешанными вперемешку рекурсиями, массивами и прочими страшными терминами, максимально приближенный к искомому результат был таким:

Дом1
Квартира 1
Дом1
Квартира 2
Дом1
Квартира 5
и т.д..

Ну и соответственно, главный вопрос: не поможет ли кто-нибудь решить эту тривиальную для большинства местных пользователей задачу? Ну или дать пинок в нужном направлении?
Invis1ble
если я правильно понял задачу, то
запрос примерно такой:
select * from apartments a
left join houses h on h.id = a.house_id and h.uniq_id = a.uniq_id

обработка такая:
$data = [];

while ($row = mysql_fetch_assoc($result)) {
if (!isset($data[$row['h.id']])) {
$data[$row['h.id']] = [
'address' => $row['h.address'],
'apartments' => [],
];

}

$data[$row['h.id']]['apartments'][] = [
'number' => $row['a.number'],
];

}


_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

Bezdna
Цитата (Invis1ble @ 24.03.2015 - 20:52)
обработка такая:


На первый взгляд всё верно, единственно - нижеприведённые 3 строки это пинок в нужном направлении? Просто подобные конструкции, к сожалению, пока слабо доступны моему пониманию.


$data = [];
$data[$row['h.id']] = ['address' => $row['h.address'], 'apartments' => [],];
$data[$row['h.id']]['apartments'][] = ['number' => $row['a.number'],];
Invis1ble
Цитата (Bezdna @ 24.03.2015 - 21:48)
На первый взгляд всё верно, единственно - нижеприведённые 3 строки это пинок в нужном направлении?

это готовое заполнение массива, в нем будут структуры подобные нужным тебе

Цитата (Bezdna @ 24.03.2015 - 21:48)
Просто подобные конструкции, к сожалению, пока слабо доступны моему пониманию.

а если заменить [] на array() - будет понятней? :)

$data = array();

while ($row = mysql_fetch_assoc($result)) {
if (!isset($data[$row['h.id']])) {
$data[$row['h.id']] = array(
'address' => $row['h.address'],
'apartments' => array(),
);

}

$data[$row['h.id']]['apartments'][] = array(
'number' => $row['a.number'],
);

}

echo '<pre>', print_r($data, true), '</pre>';


_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

Invis1ble
итерация по $data с выводом как нужен тебе:

foreach ($data as $house_id => $_data) {
echo $_data['address'], '<br>';

foreach ($_data as $apartment) {
echo $apartment['number'], '<br>';
}
}


должно выводить
Цитата
Дом1
Квартира 1
Квартира 2
Квартира 5
Дом2
Квартира 1
Квартира 4
Квартира 15
и т.д.
Bezdna
Цитата (Invis1ble @ 24.03.2015 - 21:54)
а если заменить [] на array() - будет понятней?


"А ларчик просто открывался"(с). Скорее это более понятно злополучному Нотепаду, усиленно сигнализирующему об ошибках в этих строках.

Спасибо, гениальное - просто.
Invis1ble
Пожалуйста.
[] - укороченный синтаксис массива, доступен начиная с php 5.4

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

Быстрый ответ:

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