【问题标题】:Undefined offset issue in explode爆炸中未定义的偏移问题
【发布时间】:2013-04-22 11:52:30
【问题描述】:

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

注意:未定义的偏移量:第 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 基础知识的网站,但如果有任何建议可以帮助解决问题,我将不胜感激!

【问题讨论】:

    标签: php csv explode


    【解决方案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 的第一行字符串。

    【讨论】:

    • 不,不幸的是我仍然得到偏移量错误:/ 注意:未定义的偏移量:C:\Users\Joshua\Desktop\USBWebserver v8.5\8.5\root\Assignment\Table.php 中的 1 在线14
    • 好的,让我看看其他的。
    • 谢谢我的朋友! :) 我希望我在所有这些编码方面都做得更好,但我想我们都必须从某个地方开始!
    • 享受编程的乐趣 :)
    【解决方案2】:

    尝试这种方法,使用原生 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>
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        $temporal_var = explode(",", $out[$i][0]);
        print_r($temporal_var);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-06-26
          • 2013-01-26
          • 1970-01-01
          • 1970-01-01
          • 2015-12-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多