2012-10-16 8 views
0

항목이있는 결과를 반복하려고합니다. 항목에 유형이 있고 각 그룹의 카테고리 제목을 에코하려고합니다. 일반적으로 이것은 하나의 루프에서 훌륭하게 작동하지만 $ item-type foreach I 으로 생각합니다. 어떤 해결책?PHP Foreach Loop with If

<h2>Package <?=$packages->id?></h2> 

<?php foreach($packages->item as $item):?> 

    <?php foreach($item->type as $type):?> 

     <?php $subtype = null;?> 

     <?php if($subtype != $type->name)?> 

      <h3><?=$type->name?></h3> 

      <?=$item->name?><br> 

      <?php $subtype = $type->name;?> 

    <?php endforeach;?> 

<?php endforeach;?> 

DB 구조 : 내 결과는 현재

items 
    id name 
    1 mainitem1 
    2 mainitem2 
    3 item1 
    4 item2 
    5 item3 
    6 item4 

types 
    id name 
    1 category 1 
    2 category 2 
    3 subcategory1 
    4 subcategory2 

item_type 
    id item_id type_id 
    1 1   1 
    2 2   2 
    3 3   3 
    4 4   3 
    5 5   4 
    6 6   4 

packages 
    id item_id 
    1 1 
    2 2 

item_package 
    id package_id item_id 
    1 1   3 
    2 1   5 
    3 2   4 
    4 2   6 

무엇 :

package 1 
    category 1 
     item 3 
    category 1 
     item 5 
    category 2 
     item 4 
    category 2 
     item 6 

원하는 결과 :

package 1 
    category 1 
     item 3 
     item 5 
    category 2 
     item 4 
     item 6 
+1

당신은 대신 print_r ($ packages-> item)을 쓸 수 있습니다 – Baba

+0

미리 포맷 된 약 1000 줄 – dynamo

+0

여기를 다루는 것에 대해 알고 싶습니다 – Baba

답변

1

$subtype는 설정 이후 플레이 할 역할이 없습니다 th 전에 널에 대신 외부 루프

의 내부 루프에서이 모두를 자사의 이후 문

$subtype = null; 
if($subtype != $type->name) <------- This would always be true 

카테고리 이름도 중복 전자 경우 난 당신이 언급 한 당신의 이상에 대한 해결책으로

printf("<h2>%s</h2>", $packages->id); 
foreach ($packages->item as $item) { 
    printf("<h3>%s</h3>", $type->name); 
    print("<ul>"); 
    foreach ($item->type as $type) { 
     printf("<li>%s</li>", $item->name); 
    } 
    print("</ul>"); 
} 
+0

@dynamo이 코드가 여러분에게 도움이 될 것입니다. 사용해보십시오. – Baba

+0

이것은 여전히 ​​나에게 같은 결과를주고, 내 붙여 넣기로 위의 내 의견을 확인하십시오. – dynamo

+0

@dynamo @dynamo를 사용하여 실제 객체를 처리 한 다음 과거 bin에 serialize ($ packages)를 추가합니다. 객체를 직접 사용할 수 있습니다 – Baba

1

필요하다고 생각 문제는 아래 코드 스 니펫을 참조하십시오.

<h2>Package <?=$packages->id?></h2> 
    <?php foreach($packages->item as $item):?> 
    <h3><?php echo $item->name;?></h3> 

    <?php foreach($item->type as $type):?> 
    <?php $subtype = null;?> 
    <?php if($subtype != $type->name)?> 
    <?=$type->name?><br> 
    <?php $subtype = $type->name;?> 
    <?php endforeach;?> 
    <?php endforeach;?>