2012-01-29 3 views
1

3 열마다 새로운 행을 만들도록하고 싶습니다. 내가 잃어버린 나는 심지어 내가 원하는 것 다른 posts.So을 읽은 후이 작업을 수행하는 방법을 알아낼 수 없습니다 PHP foreach 테이블 컬럼

같은 아이콘 아이콘 아이콘
아이콘 아이콘 아이콘
아이콘 아이콘 아이콘
등 ..

foreach($sMenu as $row) { 
    $sClass = ($row['id'] == $aPage['id']) ? ' class="ui-btn-active ui-btn-custom"' : ' class="ui-btn-custom"'; 
    $sIcon = ($row['icon'] != '') ? ' data-icon="' . $row['icon'] . '"' : ''; 

    $sSiteRoot = get('site-root'); 

    $row['url'] .= ($row['url'] == '') ? '' : '/'; 

    $url = $sSiteRoot . $row['url']; 
    $url = str_replace('(', '%28', $url); 
    $url = str_replace(')', '%29', $url); 
    $url = str_replace("'", '%27', $url); 
    $sNavigation2 .= '<td><img src=". $sIcon .' . $url . '"></td>'; 
} 
+0

이 작업을 수행하는 가장 쉬운 방법입니다 ('$ I = 0'). 그 다음 숫자가 2 ('if ($ i == 2) ')와 같은지 확인한 후 ...''휴식을 추가하고 (필요한 경우 ...) $ i' 변수. 그런 다음,'foreach' 루프를 계속 진행하십시오. – summea

+0

그래서 코드를 어디에 구현할 것인가? 그것은 –

+0

이 될 것입니다. 나는 그 대답을 아래의 답변에 넣었습니다 ... 그리고 그 코드는 읽기 쉽습니다. :) – summea

답변

5

때로는 가장 쉬운 방법은이 루프를 실행 한 횟수를 변수에 기록하는 것입니다. 예를 들어. (이 경우)

$i = 0; 

그리고, 루프의 내부에 단지 수 $i 2 같으면 확인

foreach($sMenu as $row) { 

    // this is all your old code right here... 

    if ($i == 2) { 
     // then add your </tr><tr> break or whatever... 
     $i = 0; 
    } else { 
     $i++; 
    } 
} 

이어서, 단지의 foreach 통해 계속 고리.

또한이 "행 휴식"체크를 작성하는 깨끗한 방법으로 modulus operator을 사용하여 수행 할 수 있습니다 (여기에 다른 답변으로 표시한다.)

+1

+ 각 루프의 끝에서 $ i를 증가 시키십시오. – clime

+0

하하하 당신은 저를 이길 것입니다 ... – SolidSnake

+0

이것은 단지 한 가지 방법입니다. :) – summea

2

사용 modulus (%) 및 출력 새 행 경우 카운터는 3으로 나누어입니다 :

$i = 0; 

foreach($sMenu as $row) { 
    $i += 1; 

    $sClass = ($row['id'] == $aPage['id']) ? ' class="ui-btn-active ui-btn-custom"' : ' class="ui-btn-custom"'; 
    $sIcon = ($row['icon'] != '') ? ' data-icon="' . $row['icon'] . '"' : ''; 

    $sSiteRoot = get('site-root'); 

    $row['url'] .= ($row['url'] == '') ? '' : '/'; 

    $url = $sSiteRoot . $row['url']; 
    $url = str_replace('(', '%28', $url); 
    $url = str_replace(')', '%29', $url); 
    $url = str_replace("'", '%27', $url); 
    $sNavigation2 .= '<td><img src=". $sIcon .' . $url . '"></td>'; 

    if($i % 3 == 0) { 
     $sNavigation2 .= '</tr><tr>'; 
    } 
} 
0

당신이 배열의 인덱스로 "키"를 사용할 수있다 : 매 3 항목을 확인하는

foreach($sMenu as $index=>$row) 
{ 
    if(($index)%3==0){$sNavigation2 .= "<tr>";} 
    //$sClass = ($row['id'] == $aPage['id']) ? ' class="ui-btn-active ui-btn-custom"' : ' class="ui-btn-custom"'; 
    //$sIcon = ($row['icon'] != '') ? ' data-icon="' . $row['icon'] . '"' : ''; 

    //$sSiteRoot = get('site-root'); 

    //$row['url'] .= ($row['url'] == '') ? '' : '/'; 

    //$url = $sSiteRoot . $row['url']; 
    //$url = str_replace('(', '%28', $url); 
    //$url = str_replace(')', '%29', $url); 
    //$url = str_replace("'", '%27', $url); 
    //$sNavigation2 .= '<td><img src=". $sIcon .' . $url . '"></td>'; 
    if(($index+1)%3==0){$sNavigation2 .= "</tr>";} 
} 
if(count($sMenu)%3 != 2){$sNavigation2 .= "</tr>";} 
0

한 가지 방법은 01을 사용하는은 나눌 때 나머지를 확인합니다.

이 여기에 당신이 시작하는 몇 가지 psuedocode입니다 : 변수가이 루프를 실행 횟수를 추적해야하는 경우에

$counter = 0; 
// start the first row 
$html = '<tr>'; 
foreach($sMenu as $row) { 
    //add an item 
    $html .= '<td>' . $row[ 'id' ] . '</td>'; 
    //increment the counter, which is used to keep track of the number of items 
    $counter++; 
    //if $counter/3 has zero as a remainder, it's divisible by three 
    if($counter % 3 === 0) { 
     //end the row after 3 items and begin a new one 
     $html .= '</tr><tr>'; 
    } 
} 
//make sure there's an ending <tr> in case it ended on an odd number of items 
$html = preg_replace('/<tr>$/gi', '', $html); 
$html .= '</tr>';