使用"爆炸"时未定义的偏移量

时间:2015-02-07 13:52:53

标签: php

当我运行下面的代码时,我得到" undefinied offset 4" (或5)行中的错误:

if ($photo_type == '10') $ifile = $img[4]; else $ifile = $img[5];

然而,

echo "$img[4]<br />$img[5]";

同时显示 - $img[4]$img[5]。为什么我得到&#34;未定义的偏移&#34;错误?

$imagedata = explode("|", $images);
$num_images = count($imagedata);

foreach($imagedata as $image) {

$img = explode(":", $image);

if ($photo_type == '10') $ifile = $img[4]; else $ifile = $img[5];

echo "$img[4]<br />$img[5]";
}

print_r($img);
Array ( [0] => 6403 [1] => 2 [2] => 1 [3] => c [4] => file1.jpg ) 

我不能使用&#34; list&#34;因为有时会有第5个值,有时则没有。当第5个值不存在时,我得到&#34;未定义的偏移&#34;再次出错。

2 个答案:

答案 0 :(得分:0)

echo "$img[4]<br />$img[5]";

Works,因为它将[4]作为文本读取,而不是作为变量的一部分。相反,您应该使用花括号来封装变量:

echo "{$img[4]}<br />{$img[5]}";

然后,它不会起作用。

偏移量4和5不存在意味着explode的输出不是具有5-6个成员的数组,而是更少。您可以var_dump($image, $img);查看正在进行的操作。

答案 1 :(得分:0)

只需更改为:

if ($photo_type == '10') $ifile = $img[4]; else $ifile = $img[5];

if (!isset($img[4])) {
   echo 'there is no index 4 in';
   print_r($img);
} elseif (!isset($img[5])) {
   echo 'there is no index 5 in';
   print_r($img);
} else {
echo "$img[4]<br />$img[5]";

}