나는 내 문제에 대한 좋은 답변없이 포럼에서 검색을 수행했습니다. 내가 뭔가를 놓친 경우, 저를 질문에 연결해주십시오!카테고리 및 항목 1 큰 배열
내가해야 할 일은 간단합니다 : 내 범주 및 항목의 전체 트리 배열을 반환하는 함수입니다. 1 깊이 (항목 및 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
),
...
)
),
...
);
는 의견을 주시기 바랍니다 :
다음은 결과 배열이 내가하려는 exemple입니다!
감사합니다.
편집
나는 코드 울부 짖는 소리를 사용하여 일부 수정했습니다,하지만 난이 할 수있는 깔끔한 방법이 확신 '. 하나 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);
}
BY ORDER없이 쿼리를 실행하고 만들 빨리해야 배열 $ catsById [$ 만일 catId] = $ cat; ID로 카테고리에 쉽게 액세스 할 수 있도록합니다. – Naktibalda
반복마다 항목을 한 번만 팝합니까? 이 모양 때문에 무한 루프가 발생합니다. – allaire
내 게시물에서 EDIT를 보아라. foreach 밖에서 먼저 팝업해야한다. 그렇지 않으면 새로운 고양이의 첫 번째 항목 (while 루프에서 파손 된 항목)이 튀어 나와야한다. 또한 foreach는 처음부터 시작되므로 DESC 범주를 정렬해야합니다.이 작업을 수행하는 데 더 깔끔한 방법이 있어야합니다. o하지만 확실히이 솔루션은 내가 처음 사용하는 것보다 낫습니다. – allaire