多维数组的E_NOTICE和未定义索引错误

时间:2014-01-24 19:26:46

标签: php error-handling e-notices

我只是想避免从php.ini关闭E_NOTICE,以便在未设置时处理大型数组。

    foreach ($rowset1 as $row) {
        if ( ! isset($stats['user'][$row['insertedBy']]['a']['xxx'])) {
            $stats['user'][$row['insertedBy']]
                ['a']['xxx'] = $row['xxx'];
        }else{
            $stats['user'][$row['insertedBy']]
                ['a']['xxx'] += $row['xxx'];
        }            
    }  
    foreach ($rowset2 as $row) {
        if ( ! isset($stats['user'][$row['insertedBy']]['b']['xxx'])) {
            $stats['user'][$row['insertedBy']]
                ['b']['yyy'] = $row['xxx'];
        }else{
            $stats['user'][$row['insertedBy']]
                ['b']['yyy'] += $row['xxx'];
        }            
    }  

我只想在循环中编写数组键,只需要一次,就像我没有打开E_NOTICE一样。

1 个答案:

答案 0 :(得分:0)

不,你真的不想关掉那个通知。这不是你唯一会注意到的事情。只需添加简单的额外行来处理它,或者如果您发现它是一组通用的代码,您可以反复编写,在函数中对其进行编码。通知告诉你,你的代码发生了一些可疑的事情。不要让你的代码闻到......你以后会后悔的。

示例:通过引用传递数组,两个循环之间只有'a'和'b'的区别

function blah($row, &$stats, $altVariable, $threeLetterVar) {

 if ( ! isset($stats['user'][$row['insertedBy']][$altVariable]['xxx'])) {
            $stats['user'][$row['insertedBy']]
                [$altVariable][$threeLetterVar] = $row['xxx'];
        }else{
            $stats['user'][$row['insertedBy']]
                [$altVariable][$threeLetterVar] += $row['xxx'];
        } 
}


foreach ($rowset1 as $row) {
    blah($row, $stats, 'a', 'xxx');
}

foreach ($rowset2 as $row) {
    blah( $row, $stats, 'b', 'yyy');
}