E_NOTICE и неопределенная ошибка индекса с многомерными массивами
Я просто хочу избежать отключения E_NOTICE из php.ini, чтобы обрабатывать большие массивы, когда они не установлены.
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 ответ
Нет, ты действительно не хочешь отключать это уведомление. Это не единственное, на что вы будете получать уведомления. Просто добавьте простую дополнительную строку, чтобы разобраться с этим, или, если вы обнаружите, что это обычный набор кода, который вы пишете снова и снова и снова, закодируйте его в функцию. В уведомлении говорится, что с вашим кодом происходит что-то подозрительное. Не позволяйте своему коду пахнуть... вы пожалеете об этом позже.
Пример: передайте массив по ссылке, у вас будет разница только между двумя циклами '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');
}