如何避免PHP注意"Undefined offset:0"而不检查数组的每个字段

maz*_*aze 27 php arrays

我有以下数组:

    $keyvisual_data = array(
        'video_file'            => $row->field_field_video[0]['rendered']['#item']['uri'],
        'bild_file'             => $row->field_field_bild[0]['rendered']['#item']['uri'],
        'subline_src'           => $row->_field_data['nid']['entity']->field_key_titel['und'][0]['safe_value'],
        'screenreader_src'      => $row->field_field_alt_screenreader[0]['rendered']['#markup'],
        'alt_src'               => $row->field_field_bild[0]['rendered']['#item']['alt']
    );
Run Code Online (Sandbox Code Playgroud)

可能会发生某些字段未设置,这没关系.事实上我得到这个PHP通知:

注意:未定义的偏移量:bafa_insert_keyvisual()中的0 ...........

是否有可能为每个键分配一个默认值,以防它未定义而不用手动检查数组的每个字段?

感谢帮助

Nea*_*eal 45

不,那里没有

你可以这样做isset():

if(isset($array[0])){
    echo $array[0];
}
else {
  //some error?
}
Run Code Online (Sandbox Code Playgroud)

或者,如果您知道您只是要检查索引0:

$array = $array + array(null);
Run Code Online (Sandbox Code Playgroud)

所以如果原来$array[0]没有设置,现在就是null


Dan*_*ani 18

是的,@在字段之前添加如下:

$keyvisual_data = array(
    'video_file'            => @$row->field_field_video[0]['rendered']['#item']['uri'],
    'bild_file'             => @$row->field_field_bild[0]['rendered']['#item']['uri'],
    'subline_src'           => @$row->_field_data['nid']['entity']->field_key_titel['und'][0]['safe_value'],
    'screenreader_src'      => @$row->field_field_alt_screenreader[0]['rendered']['#markup'],
    'alt_src'               => @$row->field_field_bild[0]['rendered']['#item']['alt']
);
Run Code Online (Sandbox Code Playgroud)

然后初始化空值:

if($keyvisual_data['video_file'] === null)
    $keyvisual_data['video_file'] = $default_video_file;
Run Code Online (Sandbox Code Playgroud)

等等...

  • @maze这样做的问题就是它无缘无故地抑制了错误...... (4认同)
  • "目前,"@"错误控制操作符前缀甚至会禁用错误报告以解决将终止脚本执行的严重错误.除此之外,这意味着如果您使用"@"来抑制某个函数的错误,并且它不是'如果可用或者输入错误,剧本就会在那里死亡而没有任何迹象表明原因." http://php.net/manual/en/language.operators.errorcontrol.php (4认同)
  • 我认为isset是你应该去的方式 (2认同)