2016-09-07 7 views
1

CSVファイルからHTMLテーブルを生成するPHPスクリプトがあります。PHPで複数のセルが空の場合は行をスキップ

現在、情報が欠落しているセルがあれば、その行はスキップされます。しかし、1つ以上のセルが見つからなかった場合、行をスキップすると好きです。 行に空のセルが2つある場合は、スキップする必要があります。

私はそれを//edit hereと記しましたが、これを達成する方法は不明です。

<?php 
$idsColumnsWanted = array(0,1,8,19); 

echo "<table class='table table-bordered' id='example'>\n\n"; 

$f = fopen("users.csv", "r"); 
$first_line = false; 

while (($line = fgetcsv($f)) !== false) { 
    // Restart column index 
    $i = 0; 
    $row =""; 

    if($first_line == false) { 
     $row = "<thead><tr>"; 
     $col = "th"; 
    } else { 
     $row = "<tr>"; 
     $col= "td"; 
    } 

    $is_empty = false; 
    foreach ($line as $i => $cell) { 
     // Skips all columns not in your list 
     if (! in_array($i, $idsColumnsWanted)) continue; 

     // edit here 
     if ($cell !== '') { 
      $row .= "<".$col.">" . htmlspecialchars($cell) . " </".$col.">"; 
     } else { 
      $is_empty = true; 
     } 
     // Increase index 
     $i++; 
    } 

    if($first_line == false) 
     $row .= "</tr></thead>"; 
    else 
     $row .= "</tr>"; 

    $first_line = true; 

    if ($is_empty) { 
     continue; 
    } else { 
     echo $row; 
    } 
} 
fclose($f); 
echo "\n</table>"; 
?> 
+3

は、代わりに、ブール変数のカウンタを使用して、セルが空の場合、それを増加させ、それが大きいかどうかを確認ループの後の1より大きい。 – jeroen

+1

ここに行く:http://stackoverflow.com/questions/8882981/check-if-variable-exist-more-than-once-in-array。行の複数の値(セル)が空の場合は、$ is_emptyをtrueに設定します。 –

+1

@jeroenでは、各行の開始時にカウンタをリセットすることを忘れないでください。ところで、thead/trロジックは疑わしいようです。 – Dfaure

答えて

2

あなたが行に空になっているどのように多くの細胞coundする必要が

$is_empty = false; 
$count = 0; 
$countlimit = 2; // define empty cell limit here 
foreach ($line as $i => $cell) { 
    // Skips all columns not in your list 
    if (!in_array($i, $idsColumnsWanted)) 
     continue; 

    // edit here 
    if($cell==""){ 
     $count++; 
    } 

    if ($count <= $countlimit) { 
     $row .= "<" . $col . ">" . htmlspecialchars($cell) . " </" . $col . ">"; 
    } else { 
     $is_empty = true; 
     break; 
    } 

} 
+0

私は '$ countlimit = 1;'を '0'から始めるので' 0,1 'に変更する必要がありました@Rakesh:ありがとうございます。@Rakesh :-D – michaelmcgurk

+0

いいえ最初にインクリメントしてから条件$ count <= $ countlimitをチェックするので、正しいと思います。 –

+2

設定後に 'foreach'から脱出したいかもしれません'$ is_empty = true;'また、 '$ cell!== '' ||'ビットは必要ありません。それだけで '$ count <= $ countlimit'となります。 – megaflop

1

このコードを試してみてください。これを行うには、各行のカウンタを初期化します。

$empty_cells = 0; //Init with 0 for each line 
foreach ($line as $i => $cell) { 
    // Skips all columns not in your list 
    if (! in_array($i, $idsColumnsWanted)) continue; 

    // edit here 
    if ($cell !== '') { 
     $row .= "<".$col.">" . htmlspecialchars($cell) . " </".$col.">"; 
    } else { 
     $empty_cells++; //count how many empty cells you have. 
    } 
    // Increase index 
    $i++; 
} 

とその確認後、このように二つ以上の空のセルがある場合:

if ($empty_cells >= 2) { 
    continue; 
} else { 
    echo $row; 
} 
+1

'$ empty_cells ++'の後に 'if($ empty_cells == 2)break;'を追加すると、スクリプトは使用されない行をループし続ける必要はありません。 – megaflop

関連する問題