在php中循环打印csv内容的问题

时间:2011-05-13 12:19:37

标签: php debugging

这个片段只是起作用:|

我可以吐出所有数组数据,但我想要的是能够逐列打印数据。

function processCSV()
{
    global $uploadFile;
    $loadLocationCsvUrl = fopen($uploadFile,"r");   
    if ($loadLocationCsvUrl <> false)
    {
        while ($locationFile = fgetcsv($loadLocationCsvUrl, ','))
        {
            $csvCols = array(
                             'country' => $locationFile[9],
                             'open' => $locationFile[4],
                             'officeid' => $locationFile[2]
                             );
            foreach($csvCols as $locationData)
            {
                if ($locationData == '') {
                    echo "<p>" . "blank" . "</p>";
                }
                else
                {
                    echo "<p>" . $locationData . "</p>";        
                }
            }
        }
    }    
    fclose($loadLocationCsvUrl);
}
processCSV();

我认为这样可行:

echo "<p>" . $locationData['country'] . "</p>";  

但如果我这样做,我会看到格式不正确的页面,如下图所示(上传的截图)。

http://www.imageupload.org/?d=9C676F041


我设法用不同的实现来解决这个问题,我切换到了2d数组,表格呈现从来都不是它获取数据的问题。

<?php
function processCSV()
{
    global $uploadFile;
    $loadLocationCsvUrl = fopen($uploadFile,"r");   
    if ($loadLocationCsvUrl <> false)
    {
        while ($locationFile = fgetcsv($loadLocationCsvUrl, ','))
        {
            $officeId = $locationFile[2];
            $country = $locationFile[9];
            $open = $locationFile[4];
            echo "<table>";
                echo "<tr>";
                    echo "<td>$officeId</td>";
                    echo "<td>$country</td>";
                    echo "<td>$open</td>";
                echo "</tr>";
            echo "</table>";
        }
    }
    fclose($loadLocationCsvUrl);
}
processCSV();
?>

感谢您回复并抱歉,如果我浪费了任何时间。

3 个答案:

答案 0 :(得分:0)

听起来你想要以colum方式显示输出。在这种情况下,<table>是预期的标记。但我会先简化你的代码:

// read in
$csv = array_map("str_getcsv", file($uploadFile));

// output
print "<table>";
foreach ($csv as $row) {
    print <<<HTML
      <tr>
         <td>$row[9]</td>
         <td>$row[4]</td>         
         <td>$row[2]</td>
      </tr>
HTML;
}

如果不对列使用关联数组键,则创建它们没有意义。

答案 1 :(得分:0)

&LT; p为H.是一个块元素,因此每个连续的元素都按设计进入一个新的行。你可以设置'display:inline;'如果你想在你的CSS中,但为什么要使用&lt; p&gt;?

您可以使用内联元素,例如&lt; span&gt;或者使用'float:left'使块元素按照您的意愿运行。

假设数据不适合制表。

答案 2 :(得分:0)

创建一个父表,然后是tr和td,

现在,在这个td中,创建一个表并打印一列td-trs

然后关闭此表

在父母

中打印新的td

重复一列trs

的表格

...示例

<table><tr><td>
    <table>
    <tr><td>col1stuff1</td></tr>
    <tr><td>col1stuff2</td><tr>
    <tr><td>col1stuff3</td><tr>
    </table>
</td><td>
    <table>
    <tr><td>col2stuff1</td></tr>
    <tr><td>col2stuff2</td><tr>
    <tr><td>col2stuff3</td><tr>
    </table>
</td><td>
    <table>
    <tr><td>col3stuff1</td></tr>
    <tr><td>col3stuff2</td><tr>
    <tr><td>col3stuff3</td><tr>
    </table>
</td></tr></table>