【问题标题】:Undefined offset 1 PHPExcel未定义的偏移量 1 PHPExcel
【发布时间】:2018-05-30 09:05:41
【问题描述】:

调用表中的数据后,我的偏移量未定义。不知何故,我可以得到第一张唱片。但是,对于其他记录,我收到一条错误通知,指出我的偏移量未定义。

数据

Detail1||Response1||Status1::Detail2||Response2||Status2::Detail3||Response3||Status3::Detail4||Response4||Status4::Detail5||Response5||Status5::Detail6| |Response6||Status6::Detail7||Response7||Status7::Detail8||Response8||Status8::Detail9||Response9||Status9::Detail10||Response10||Status10::

运行代码时的结果

详细信息1
响应1
详情2
响应2
详情3
响应3
详情4
响应4
详情
响应5
详情6
回应6
详情7
回应7
详情8
响应8
详情9
响应9
详情10
响应10

注意:未定义的偏移量:C:\xampp\htdocs\uploadexcel\export.php 第 52 行中的 1

代码

$querydata = "SELECT DESCRIPTION from sample";
$resultdata = $conn->prepare($querydata);
$resultdata->execute();

$storeresult = $resultdata->fetchObject();
$resultquery = $storeresult->DESCRIPTION;


$pieces = explode("::",$resultquery);

$countVal = count($pieces);

$counter = 0;



while($counter<$countVal){
$pieces1 = explode("||", $pieces[$counter]);
$pieces2 = explode("||", $pieces[$counter]);


echo $pieces1[0]."<br>"; // detail
echo $pieces2[1]."<br>"; // response

$counter++;
$rowCount++;

}

你能帮我解决这个问题吗?我对为什么我的代码显示该错误感到困惑,即使它执行正确。

【问题讨论】:

  • 问题出在数据字符串中的最后一个::。 $pieces 的最后一项将是一个空字符串 -> $pieces1 将为 null

标签: php arrays


【解决方案1】:

问题是数据字符串中的最后一个 ::。 $pieces 的最后一项将是一个空字符串 -> $pieces1 将为空,因为没有什么可爆炸的。

因此,如果$pieces[$counter] 不仅仅是'',则只需在循环中添加一个测试:

<?php
$resultquery = <<<EOT
Detail1||Response1||Status1::Detail2||Response2||Status2::Detail3||Response3||Status3::Detail4||Response4||St::Detail5||Response5||Status5::Detail6||Response6||Status6::Detail7||Response7||Status7::Detail8||Response8||Status8::Detail9||Response9||Status9::Detail10||Response10||Status10::
EOT;


$pieces = explode("::",$resultquery);
$countVal = count($pieces);

$counter = 0;
$rowCount = 0;

while($counter<$countVal){
    if($pieces[$counter]>'') {
       $pieces1 = explode("||", $pieces[$counter]);
       // $pieces2 = explode("||", $pieces[$counter]); // we don't need that. $pieces1 is the same as $pieces2

       echo $pieces1[0]."<br>"; // detail
       echo $pieces1[1]."<br>"; // response
    }
    $counter++;
    $rowCount++;
}

工作 sn-p:https://3v4l.org/sXnNn

【讨论】:

    【解决方案2】:

    Notice: Undefined offset: 1 in C:\xampp\htdocs\uploadexcel\export.php on line 52 这是一个 php notice,而不是 错误,因此您的脚本将仍然执行。 请参阅PHP difference between notice and warning 了解区别。

    您的上一个状态 (Status10::) 缺少其 DetailResponse。因此 echo $pieces2[1]."&lt;br&gt;"; // response 确实会抛出该通知,因为数组键 1 在最后一次迭代中不存在。

    你可以防止在访问之前检查arraykey的通知:

    if(isset($pieces2[1])) {
      echo $pieces2[1]."<br>"; // response
    }
    

    你应该为$pieces2[0]做同样的事情。

    始终在访问数组键之前检查它们。

    【讨论】:

    • 哦,现在我明白了。所以这只是一个通知,我认为这是一个错误。这是非常有用的:)
    • @FabianSchöner 最后一个 Status10 指的是 Detail10 和 Response10。最后的 $pieces1[0] 也将为空(仍然设置为 NULL,因此没有错误)。
    • @Jeff 你说得对。仍然会在他访问它时抛出通知,还是我弄错了?在猜测第 52 行是什么时,实际上有点难以分辨。
    • 是的,无论如何都会抛出通知。但是,$pieces1[0] 不会发出任何通知,尽管它的内容是无用的(NULL)。您正在掩盖症状,而不是解决问题恕我直言。
    【解决方案3】:

    使用 foreach 循环而不是直接访问数组来避免这种错误。您的问题出现了,因为您的最后一个数组有状态,但没有响应。

    $pieces1 = explode("||", $pieces[$counter]);
    foreach($pieces1 as $piece)
       printf("%s <br />", $piece);
    

    【讨论】:

      猜你喜欢
      • 2022-01-02
      • 2011-07-22
      • 1970-01-01
      • 2021-07-12
      • 1970-01-01
      • 2021-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多