2011-12-14 3 views
0

인 php noob 만 출력합니다.PHP : 파일을 분해하고 값이

나는이 텍스트 파일 (names.txt)에 쉼표로 구분 된 이름과 코드가 있습니다. 이 유사하게 나타납니다

John doe, 123456, 876543 
Mary Ann, 456878 
Ben Anderson, 987554, 097532, 873445 

당신은 각각의 이름이 하나 최대 10 테이블

이 정보를 출력 할 원하는되는 레인 징 코드의 다른 양을 가질 수 있습니다 볼 수 있듯이 나는 노력이 :

<table> 
<?php 
$file_handle = fopen("names.txt", "rb"); 

while (!feof($file_handle)) { 

$line_of_text = fgets($file_handle); 
$parts = explode(',', $line_of_text); 

echo "<tr>"; 
echo "<td><strong>" . $parts[0] ."</strong></td>"; 
echo "<td>" . $parts[1] . "</td>"; 
echo "<td>" . $parts[2] . "</td>"; 
echo "<td>" . $parts[3] . "</td>"; 
echo "<td>" . $parts[4] . "</td>"; 
echo "<td>" . $parts[5] . "</td>"; 
echo "<td>" . $parts[6] . "</td>"; 
echo "<td>" . $parts[7] . "</td>"; 
echo "<td>" . $parts[8] . "</td>"; 
echo "<td>" . $parts[9] . "</td>"; 
echo "<td>" . $parts[10] . "</td>"; 
echo "</tr>"; 
} 

fclose($file_handle); 

?> 
</table> 

부분은 [] 비어 거기 출력에 아무것도없고 내가 오류가 가끔 $ 때문 작동하지 않습니다. 정의되지 않은 오프셋입니다. 어떻게하면이 작업을 수행하고 값이있을 때 $ parts [] 만 "에코"합니까?

답변

0

대신에 당신이 (10 라인)을 알고처럼 모든 부분을 echo'ing, 당신은 이런 식으로 그것을 대체 할 수 :

for($i = 1; $i <= 10; $i++) { 
    echo '<td>' . (!empty($parts[$i]) ? $parts[$i] : '') . '</td>'; 
} 

그것을 할 대상 : 루프 (10) 시간과 에코 항상. 그것의 내부는 해당 반복에 대한 $ parts []가 비어 있지 않은지 검사하고, 그렇지 않으면 에코합니다. 그렇지 않으면 아무 것도 울리지 않습니다.

당신은 여전히 ​​모든 것을 거기에 있기를 원합니다, 그렇지 않으면 당신의 테이블이 망가질 것입니다 (최종 사용자에게 이상하게 보일 것입니다).

+0

'empty()'는 색인이 존재하지 않으므로 경고 메시지를 표시합니다. 여기서'isset()'이 필요합니다. – PiTheNumber

+0

완벽하게 작동합니다 – MagnusGaarde

+0

갑자기 숫자 (10)이 바뀌면 어떻게 될까요? 우리는 PHP 코드를 작성하여 최대 값을 확인하고 여기에 넣을 수있는 변수로 설정합니다 : for ($ i = 1; $ i <= $ maxvalues; $ i ++) { echo ''. (! empty ($ parts [$ i])? $ parts [$ i] : ''). ''; } – MagnusGaarde

0
while (!feof($file_handle)) 
{ 
    $line_of_text = fgets($file_handle); 
    $parts = explode(',', $line_of_text); 

    // line not empty? 
    if (isset($parts[0]) && !empty($parts[0])) 
    { 
    // first line 
    echo '<td>' . $parts[0] . '</td>'; 
    // other lines 
    for($i = 1; $i <= 10; $i++) { 
     // echo with check 
     echo '<td>' . (isset($parts[$i]) ? $parts[$i] : '') . '</td>'; 
    } 
    } 
} 
1

당신은 fgetcsv()

주를 사용할 수 있습니다 CSV 파일에서 비어있는 라인은 NULL 필드를 배열로 만들어서 반환하고 에러로 처리되지 않습니다.

<table> 
<?php 
$handle = fopen("test.csv", "r"); 
while (($parts = fgetcsv($handle, 1000, ",")) !== FALSE) { 
    echo "<tr>"; 
    echo "<td><strong>" . $parts[0] ."</strong></td>"; 
    echo "<td>" . $parts[1] . "</td>"; 
    echo "<td>" . $parts[2] . "</td>"; 
    echo "<td>" . $parts[3] . "</td>"; 
    echo "<td>" . $parts[4] . "</td>"; 
    echo "<td>" . $parts[5] . "</td>"; 
    echo "<td>" . $parts[6] . "</td>"; 
    echo "<td>" . $parts[7] . "</td>"; 
    echo "<td>" . $parts[8] . "</td>"; 
    echo "<td>" . $parts[9] . "</td>"; 
    echo "<td>" . $parts[10] . "</td>"; 
    echo "</tr>"; 
} 
fclose($file_handle); 
?> 
</table> 
0

undefined offset 오류는 E_NOTICE이며, 이는 안전하게 무시할 수 있음을 의미합니다. 게재로부터 통지를 방지하기 위해, 사용 :이 작업을 수행하지 않으려면

error_reporting(E_ALL^E_NOTICE); 

, 당신은 문제를 해결할 수있는 몇 가지 방법이 있습니다. 항상 최소한 10 개 부분이있을 것입니다

$parts = explode(",", $line_of_text.",,,,,,,,,,"); 

같은 것을 : 하나의 트릭에 explode 라인을 변경하는 것입니다.

+0

작동하지만 더러울 수 있습니다! ;) – PiTheNumber

+0

이것도 작동하지만 Stefandoorn의 솔루션을 계속 사용한다고 생각합니다. – MagnusGaarde

0
<table> 
<?php 
$file_handle = fopen("names.txt", "rb"); 

while (!feof($file_handle)) { 

$line_of_text = fgets($file_handle); 
$parts = explode(',', $line_of_text); 

echo "<tr>"; 
echo "<td><strong>" . $parts[0] ."</strong></td>"; 
for($i=1; $i<=10; $i++) { 
    echo "<td>" . $parts[$i] ? $parts[$i] : '' . "</td>"; 
} 
echo "</tr>"; 
} 

fclose($file_handle); 

?> 
</table> 
관련 문제