未定义的偏移量1 PHPExcel

时间:2018-05-30 09:05:41

标签: php arrays

在我的表中调用我的数据后,我有一个未定义的偏移量。不知怎的,我可以获得第一张唱片。但是,对于其他记录,我有一个错误通知,我有一个未定义的偏移量。

数据

Detail1 || ||响应1状态1 :: Detail2 || || RESPONSE2状态2 :: Detail3 || || Response3 :: STATUS3 || Detail4 || Response4 STATUS4 :: Detail5 || || Response5 :: STATUS5 Detail6 | | Response6 || STATUS6 :: Detail7 || || Response7 :: STATUS7 || Detail8 || Response8 :: STATUS8 || Detail9 || Response9 :: Status9 || Detail10 || Response10 :: Status10

运行代码时的结果

Detail1
响应1
Detail2
RESPONSE2
Detail3
Response3
Detail4
Response4
Detail5
Response5
Detail6
Response6
Detail7
Response7
Detail8
Response8
Detail9
Response9
Detail10
Response10

注意:未定义的偏移量:第52行的C:\ xampp \ htdocs \ uploadexcel \ export.php中的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++;

}

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

3 个答案:

答案 0 :(得分:1)

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

如果$pieces[$counter]不仅仅是&#39;&#39;那么只需在循环中添加一个测试:

<?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++;
}

工作片段:https://3v4l.org/sXnNn

答案 1 :(得分:0)

Notice: Undefined offset: 1 in C:\xampp\htdocs\uploadexcel\export.php on line 52它是一个php 通知,而不是错误,因此您的脚本将仍然执行。 有关差异,请参阅PHP difference between notice and warning

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

您可以在访问之前阻止通知检查arraykey:

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

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

始终检查数组密钥,然后再访问它们。

答案 2 :(得分:-1)

使用foreach循环而不是直接访问数组以避免此类错误。您的问题出现了,因为您的上一个数组具有状态,但没有响应。

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