2014-01-24 39 views
0

我只是想避免關閉php.ini中的E_NOTICE,以便在未設置大數組時處理它們。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打開。

回答

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'); 
} 
+0

這是什麼我在尋找,一個函數來處理這個在沒有編寫太多代碼處理的情況下,可以使用大**多維**陣列的「isset」情況,並需要新的密鑰。 –

+0

它不能解決任何問題,因爲如果我想在數組的其他維度中添加一個新的密鑰,我將需要其他類似的函數...即:$ stats ['hey'] ['Im'] ['new'] ['rewriteme] ['again'] + = $ x –