8

这是我的脚本的一部分:

$one = 0;
$two = 0;
$three = 0;

$data = 'a-b-c';

$data = explode("-", $data);
$one = $data[0];
$two = $data[1];
$three = $data[2];

到目前为止没有问题,但$data有时可以

$data = 'a-b-c';

而有时

$data = 'a-b';

的情况下$data = 'a-b';我得到未定义的偏移量:3错误。有什么方法可以避免这个错误吗?

4

5 回答 5

22

将分配包装到if-block 中:

if(isset($data[0])) {
    $one = $data[0];
}

...

现在检查此数组项是否已设置,如果不是,您只需不分配它,不会出现错误。

于 2013-06-30T12:11:31.890 回答
5

假设至少有一个永远存在

$data = 'a-b';

list($one, $two, $three) = explode("-", $data . '-0-0');
于 2013-06-30T12:12:53.283 回答
1

您需要使用isset。Isset 检查变量是否存在。

// You can get rid of this since we set the default later if isset fail
/*
$one = 0;
$two = 0;
$three = 0;
*/

$data = 'a-b-c';

$data = explode('-', $data);
$one = (isset($data[0]) === TRUE ? $data[0] : 0);
$two = (isset($data[1]) === TRUE ? $data[1] : 0);
$three = (isset($data[2]) === TRUE ? $data[2] : 0);
于 2013-06-30T12:13:33.603 回答
0

通过使用isset喜欢isset($data[0] == true)

于 2015-11-19T11:29:54.967 回答
0

我通常这样做:

$a = array(1,2,3,4);
$current = 0;
$index = 0;
while(isset($a[$index])) {
    $current = $a[$index];
    //... do something ...
    $index++;
}

这行得通!

于 2016-07-20T09:37:06.810 回答