1

まず、初歩的または単純な質問をしたことをお詫びしますが、問題を解決するために調査したコードが見つからないようです。

Notice: 未定義のオフセット: C:\Users\Joshua\Desktop\USBWebserver v8.5\8.5\root\Assignment\Table.php の 14 行目に 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++;

この行を削除するとうまくいくはずです。

更新

ファイルの終わりを意味するため、false でない場合は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

$outアレイを初期化しましたか? さらに、配列に要素を追加するため$iに呼び出すだけなので、インデックスは必要ありません。$out[] = array($line);

于 2013-04-28T21:41:25.983 に答える
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 に答える