未定义的数组索引

时间:2014-07-25 19:47:13

标签: php arrays

我有以下数组结构(从JavaScript对象到JQuery AJAX):

[column_id]
    [column_content_id]
        [content]
            .....
        [options]
            .....
        [styles]
            .....

我通过以下方式浏览数组:

foreach($this->rom['columns'] as $column_id => $columns) {
    // add columns
    $this->add_column($column_id, $this->id, $columns['options']['column-width']);
    // content
    foreach($columns as $content_id => $content) {
        // assign values
        $values = array(
            'styles'        => $content['styles'], 
            'options'       => $content['options'],
            'style_class'   => 'is-cc-style', 
            'in_column'     => true, 
            'id'            => str_replace('#', '', $mc_content_id),
            'column_id'     => $column_id,
            'content_type'  => $content['content_type'],
            'options_class' => 'is-cc-option'
        );
    }
}

除了我收到以下通知外,一切都运作良好:

Notice: Undefined index: styles
Notice: Undefined index: options
Notice: Undefined index: content_type

我该如何避免这种情况?目前我使用:

if(isset($content['styles'])) {
    $content['styles'] = '';
}

但我想这并不是它应该如何。

感谢您的帮助! :)

2 个答案:

答案 0 :(得分:2)

如果没有设置属性,看起来你想要返回一个空字符串,而你使用的内容对我来说就像语法错误一样?

以下是我的做法

    $values = array(
        'styles'        => isset($content['styles']) ? $content['styles'] : "", 
        'options'       => isset($content['options']) ? $content['options'] : "",
        'style_class'   => 'is-cc-style', 
        'in_column'     => true, 
        'id'            => str_replace('#', '', $mc_content_id),
        'column_id'     => $column_id,
        'content_type'  => isset($content['content_type']) ? $content['content_type'] : "",
        'options_class' => 'is-cc-option'
    );

答案 1 :(得分:0)

当你尝试为变量分配一些NULL时,你会得到这样的通知(这取决于你打开的错误的类型),我猜测样式,选项和/或content_type是可空的?如果是这样,您可以使用@来抑制警告,如下所示:

    $values = array(
        'styles'        => @$content['styles'], 
        'options'       => @$content['options']
    );

或者如果你想将它设置为默认值,adeneo的解决方案将是最好的。