Я сделал поиск по форуму без каких-либо хороших ответов на мою проблему.Если я что-то пропустил, не стесняйтесь связать меня с вопросом!
Что мне нужно сделать, так это просто: функция, которая возвращает массив полного дерева моих категорий и элементов.У меня есть только 1 глубина (item и cat_id), поэтому рекурсия не требуется (хотя, если у вас есть рекурсивное решение, я с радостью приму это).
Прямо сейчас, я сделал это, но это довольноплохо, так как я делаю несколько запросов ...
function build_tree()
{
global $wpdb;
$cats = $wpdb->get_results("SELECT * FROM wp_catering_cats");
foreach($cats as &$cat)
{
$id = $cat->id;
$cat->items = $wpdb->get_results("SELECT * FROM wp_catering_items WHERE cat_id = $id");
}
return $cats;
}
Мои таблицы действительно просты:
wp_catering_items
id, cat_id, name, price
wp_catering_cats
id, name
Вот пример массива результатов, который я хочу:
Array
(
[0] => array
(
[id] => 1
[name] => Cat #1
[items] => Array
(
[0] => array
(
[id] => 1
[cat_id] => 1
[name] => Item #1
[price] => 5
),
...
)
),
...
);
Если что-то не понятно, не стесняйтесь комментировать!
Спасибо!
EDIT
Я сделал несколько модификаций, используя приведенный ниже код, но я почти уверен, что есть более удобный способ сделать это.Заказывать один DESC и один ASC просто не звучит правильно ..
function build_tree()
{
global $wpdb;
$cats = $wpdb->get_results("SELECT * FROM wp_catering_cats ORDER BY id DESC");
$items = $wpdb->get_results("SELECT * FROM wp_catering_items ORDER BY cat_id ASC");
$item = array_pop($items);
foreach($cats as &$cat)
{
while($item->cat_id == $cat->id)
{
$cat->items[] = $item;
$item = array_pop($items);
}
}
print_r($cats);
}