1

首先,我很抱歉提出一个必须有点菜鸟或简单的问题,但我似乎找不到任何我研究过的代码来解决我的问题。

注意:未定义的偏移量:第 14 行 C:\Users\Joshua\Desktop\USBWebserver v8.5\8.5\root\Assignment\Table.php 中的 1

此错误从偏移 1 - 7 继续。

我目前用于从 CSV 文件中提取数据的代码如下:

<?php
$fp = fopen ("quotes.csv","r");
if (!$fp) {echo "<p>Unable to open remote file.</p>"; exit;}
?>
<table>
<tr><th>ID</th> <th>Price</th> <th>Volume </th></tr>
<?php

$i=0;
while (!feof($fp)):
   $line = fgets($fp, 2048);
   $out[$i] = array($line);

   list ($ID, $Price, $StockDate, $StockTime, $Change, $DayHI, $DayLOW, $Volume,) = explode(",", $out[$i][0]);


   echo "<tr><td>$ID</td> <td>$Price</td> <td>$StockDate </td><td>$StockTime</td> <td>$Change</td> <td>$DayHI</td> <td>$DayLOW</td> <td>$Volume</td></tr>";
   $fp++;
   $i++;
endwhile;

?>
</table>
<?php


//echo "<p>".$out[0][0]."</p>";
//echo "<p>".$out[1][0]."</p>";
//echo "<p>".$out[2][0]."</p>";
fclose($fp);
?>

我不确定某些东西是如何未定义的,因为从 CSV 中调用了正确数量的值。

我知道这不是一个教别人 PHP 基础知识的网站,但如果有任何建议可以帮助解决问题,我将不胜感激!

4

4 回答 4

1

我认为您不想对文件指针 +1:

$fp++;

删除这条线应该可以解决问题。

更新

如果fgets不为假,您还应该检查它,因为它意味着文件结束:

$line = fgets($fp, 2048);
if($line === false) break;

完整的工作示例:

<?php
$fp = fopen ("quotes.csv","r");
if (!$fp) {echo "<p>Unable to open remote file.</p>"; exit;}
?>
<table>
<tr><th>ID</th> <th>Price</th> <th>Volume </th></tr>
<?php
$out = array();
$i=0;
while (!feof($fp)):
   $line = fgets($fp, 2048);
   if($line === false) break;
   $out[$i] = array($line);

   list ($ID, $Price, $StockDate, $StockTime, $Change, $DayHI, $DayLOW, $Volume) = explode(",", $out[$i][0]);


   echo "<tr><td>$ID</td> <td>$Price</td> <td>$StockDate </td><td>$StockTime</td> <td>$Change</td> <td>$DayHI</td> <td>$DayLOW</td> <td>$Volume</td></tr>";
   $i++;
endwhile;

?>
</table>
<?php


echo "<p>".$out[0][0]."</p>";
fclose($fp);

最后echo给了我来自 .csv 的第一行字符串。

于 2013-04-28T21:31:32.310 回答
0

尝试为分解值创建一个变量并检查变量是否包含所有数据

$temporal_var = explode(",", $out[$i][0]);
print_r($temporal_var);
于 2013-04-28T21:33:20.270 回答
0

尝试这种方法,使用本机 php CSV 处理程序:

<?php 
// Set a list of headers
$ths[0] = 'ID';
$ths[1] = 'Price';
$ths[2] = 'StockDate';
$ths[3] = 'StockTime';
$ths[4] = 'Change';
$ths[5] = 'DayHI';
$ths[6] = 'DayLOW';
$ths[7] = 'Volume';

// Open the file with error handling
$fp = fopen('quotes.csv', 'r');
if( !$fp ) { die('<p>Unable to open remote file.</p>'); }
// Get the size
$fz = filesize('quotes.csv') + 1;
// Create a Data holder array
$fpData = array();
// While there is a line. Use native fgetcsv()
while ( $fpRow = fgetcsv( $fp, $fz, ',' ) ) {
    // For each element in the row we asign it to its header
    for ($i=0; $i < count($fpRow); $i++) { 
        $thisRow[ $ths[$i] ] = $fpRow[ $i ];
    }
    // Append to the Data array
    $fpData[] = $thisRow;
}
// Close the file
fclose($fp);
// Test the output
// print_r( $fpData );
?>

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Get CVS</title>
</head>
<body>
    <table>
        <thead>
            <tr>
                <?php foreach ($ths as $thisField): ?>
                    <th><?php echo $thisField ?></th>
                <?php endforeach ?>
            </tr>
        </thead>
        <tbody>
            <?php foreach ($fpData as $thisItem): ?>
                <tr>
                    <td><?php echo $thisItem['ID'] ?></td>
                    <td><?php echo $thisItem['Price'] ?></td>
                    <td><?php echo $thisItem['StockDate'] ?></td>
                    <td><?php echo $thisItem['StockTime'] ?></td>
                    <td><?php echo $thisItem['Change'] ?></td>
                    <td><?php echo $thisItem['DayHI'] ?></td>
                    <td><?php echo $thisItem['DayLOW'] ?></td>
                    <td><?php echo $thisItem['Volume'] ?></td>
                </tr>
            <?php endforeach ?>
        </tbody>
    </table>
</body>
</html>
于 2013-04-28T22:22:54.783 回答
0

你有没有初始化$out数组?此外,我认为您不需要$i索引,因为您可以调用$out[] = array($line);将元素附加到数组

于 2013-04-28T21:41:25.983 回答