2014-01-24 1 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

, 함수는이 문제를 처리하는 상황에 따라 너무 많은 코드를 작성하지 않고도 새로운 ** 키를 사용하여 ** 다차원 ** 배열을위한 "사례"를 처리 할 수 ​​있습니다. –

+0

배열의 다른 차원에 새 키를 추가하고 싶다면 다른 비슷한 함수가 필요합니다. 즉 $ stats [ 'hey'] [ 'Im'] [ 'new'] 이것은 아무 것도 해결하지 못합니다. [ 'rewriteme] ['again '] + = $ x –

관련 문제