PHP数组未定义的偏移量

时间:2015-02-15 17:34:50

标签: php xml laravel xml-parsing

我正在解析一个没有常量结构的XML文档,某些节点可能存在也可能不存在,但我的解析编码的方式是我总是期望整个结构。我试过这个:

$mKvFudbalDC->c4 = null;
$mKvFudbalDC->c5 = null;
$mKvFudbalDC->c6 = null;
$mKvFudbalDC->c68 = null;
$mKvFudbalDC->c69 = null;
$mKvFudbalDC->c4 = $choices[0]->attributes()->value;
$mKvFudbalDC->c5 = $choices[1]->attributes()->value;
$mKvFudbalDC->c6 = $choices[2]->attributes()->value;
$mKvFudbalDC->c68 = $choices[3]->attributes()->value;
$mKvFudbalDC->c69 = $choices[4]->attributes()->value

$mKvFudbalDC->save();

我认为将变量设置为null将解决问题,但不是。例如,如果$choices[4]->attributes()->value 不存在,我得到一个未定义的偏移异常。我在if / else语句中尝试使用isset(),但事实证明我必须对数组的每个成员执行此操作,并且它会减慢解析和/或崩溃nginx / apache并且不会出现问题。 ; t将XML解析到最后。这可以以任何方式覆盖吗?

1 个答案:

答案 0 :(得分:1)

您可以使用三元运算符查看是否设置,如果没有将变量设置为0或-1,则:

$mKvFudbalDC->c4 = (isset($choices[0]->attributes()->value) ? $choices[0]->attributes()->value : 0);
//...

修改

否则试试这样:

$mKvFudbalDC->c69 = (isset($choices[4]) ? $choices[4]->attributes()->value : 0);
//...