2012-05-19 2 views
0

안녕 누군가가 나에게 또 다른 질문을 통해 지난 밤이 코드의 일부를 쓸 수있었습니다.주문 HTML 테이블 세포는

기본적으로 $ 결과는 영화의 배열입니다. 첫 번째 글자가 배열에서 변경 될 때마다 별도의 항목을 포함하도록 형식을 지정했습니다.

while (false !== ($entry = readdir($handle))) { 
    if($entry == "." or $entry == "..") 
     continue; 

    if($i == 0) { 
     array_push($results,substr($entry, 0,1)); 
    } else if (substr($entry, 0,1) != substr($lastEntry, 0,1)) { 
     array_push($results,substr($entry, 0,1)); 
    } 
    $lastEntry = $entry; 
    array_push($results,$entry); 
    $i++; 
} 

이 지금과 같은 배열 결과 :

Array ( 
    [0] => 0 
    [1] => 007, A View to a Kill (1985) 
    [2] => 1 
    [3] => 127 Hours (2010) 
    [4] => A 
    [5] => A Clockwork Orange (1971) 
    [6] => B 
    [7] => Back to the Future (1985) 
    [8] => Butterfly on a Wheel (2007) 
    [9] => C 
    [10] => Carnage (2011) 
    [11] => Casino (1995) 
    [12] => D 
    [13] => Defiance (2008) 
) 

그래서 기본적으로 나는 각 인덱스를 제공하는 테이블을 생성 할 (0,1

는 것을 수행하는 코드입니다 , A, C, etc.) 다른 CSS 클래스에 2의 rowspan을 지정하십시오. 나는 올바른 표를 만든다. 아래의 코드는 rowspan = 2 인 셀을 추가하고 다음 행에 number_of_cols - $ indexRow가 인쇄 된 경우 $ indexRow를 증가시킵니다. 위 행의 rowspan = 2 셀은 현재 행의 셀 중 하나를 차지합니다.

$NUM_COLUMNS = 3; 

$numRows = count($results)/$NUM_COLUMNS; 
if (count($results) % $NUM_COLUMNS > 0) { 
    $numRows += 1; 
} 

echo "<div align=\"center\"><table>"; 
$i=0; 
$indexRow=0; 
for ($i = 0; $i < $numRows; $i++) { 
    echo "<tr>\n"; 

    $index = $i; 
    $j=0; 

    if($indexRow > 0) { 
     $j+=$indexRow; 
     $indexRow=0; 
    } 

    while ($j < $NUM_COLUMNS) { 
     $entry = ''; 
     if ($index < count($results)) { 
      $entry = $results[$index]; 
     } 
     if(strlen($entry) < 2) { 
      echo "\t<td rowspan=\"2\" class=\"movieindex\">" . $entry . "</td>\n"; 
      $indexRow++; 
     } else { 
      echo "\t<td>" . $entry . "</td>\n"; 
     } 
     $index += $numRows; 

     $j++; 
    } 
    echo "</tr>\n"; 
} 
echo "</table></div>"; 

실제로 실제 영화는 rowspan = 2 셀을 사용하여 올바르게 정렬되지 않습니다. 영화는 세로로 정렬해야하지만 인덱스 셀에서 벗어나야합니다. 이 아이디어를 어떻게 피할 수 있을지 모르겠습니다. 더 이상 설명이 필요

<div align="center"> 
<table> 
<tr> 
    <td rowspan="2" class="movieindex">0</td> 
    <td>Hancock (2008)</td> 
    <td>Sin City (2005)</td> 
</tr> 
<tr> 
    <td>Hangover (2009)</td> 
    <td>Snow White (1987)</td> 
</tr> 
<tr> 
    <td>007, A View to a Kill (1985)</td> 
    <td>Happy Feet Two (2011)</td> 
    <td>Step Brothers (2008)</td> 
</tr> 

경우 그냥 물어 내가 수정하겠습니다 :

<div align="center"> 
<table> 
<tr> 
    <td rowspan="2" class="movieindex">0</td> 
    <td>Hancock (2008)</td> 
    <td>Sin City (2005)</td> 
</tr> 
<tr> 
    <td>007, A View to a Kill (1985)</td> 
    <td>Hangover (2009)</td> 
</tr> 
<tr> 
    <td>007, Diamonds Are Forever (1971)</td> 
    <td>Happy Feet Two (2011)</td> 
    <td>Snow White (1987)</td> 
</tr> 

이 내가 원하는 무엇인가 :

내가 얻을 테이블입니다. 기본적으로 내가 부탁 한 것은 정확히 어떻게 셀을 수직으로 정렬 하는가입니다. 당신이 당신의 인덱스 후 배열에 자리 표시자를 추가 할 수 있습니다, 나는 내 댓글 말했다 같이 더러운 솔루션으로, http://imageshack.us/f/163/exampletable.png/

+0

질문은 무엇을? – Zombaya

+0

내 게시물의 절반은 잘 렸습니다. 지금 편집하겠습니다. 5-10 분이 걸릴 수도 있습니다. –

+0

@ Zombaya 편집 됨 : –

답변

1

:

은 어쩌면 이것은 당신이 내가 할 노력하고있어 이해하는 데 도움이 될 것입니다 코드에 표시하지 마십시오.

} else if (substr($entry, 0,1) != substr($lastEntry, 0,1)) { 
    array_push($results,substr($entry, 0,1)); 
    array_push($results,""); 
} 

어떤이 같은 배열됩니다 :

Array ( 
    [0] => 0 
    [1] => 
    [2] => 007, A View to a Kill (1985) 
    [3] => 1 
    [4] => 
    [5] => 127 Hours (2010) 
); 

이 당신의 코드를 수정하는 경우 :

if(strlen($entry) == 1) { 
    echo "\t<td rowspan=\"2\" class=\"movieindex\">" . $entry . "</td>\n"; 
    $indexRow++; // This might be unneeded now, did not test this myself 
} else if(strlen($entry) == 0){ 
    // Do nothing, just a placeholder 
} else { 
    echo "\t<td>" . $entry . "</td>\n"; 
} 
+0

'$ indexRow ++'를 제거해야 할 수도 있으므로이 코드를 테스트하지 않았습니다. – Zombaya

+0

아직 작동하지 않습니다. 배열 수가 빈 요소로 채워지는 것처럼 행 수를 계산해야한다고 생각합니다. 어쩌면 비어 있지 않은 배열 요소를 계산할 수 있습니다. –

+0

죄송합니다. (strlen ($ entry) <2) {if if (strlen ($ entry) == 1) {. 고마워요. –