2013-10-24 6 views
3

Глядя, чтобы получить подсчет конкретных значений ключа => в многомерном массиве. У меня есть работы, т. Е. Результат верен, но я не могу избавиться от уведомления о неопределенном индексе.Неопределенный индекс в php-массиве

$total_arr = array(); 

foreach($data['user'] as $ar) { 
    $total_arr[$ar['city']]++; 
} 

print_r($total_arr); 

Любые идеи? Я пробовал isset в цикле foreach, но без радости ...

+0

Возможно, связанные с: [PHP 'Исеть()' функция Сбой в] (http://stackoverflow.com/a/17330752/1438393) –

ответ

4
$total_arr = array(); 

foreach($data['user'] as $ar) { 
    if(array_key_exists($ar['city'],$total_arr) { 
     $total_arr[$ar['city']]++; 
    } else { 
     $total_arr[$ar['city']] = 1; // Or 0 if you would like to start from 0 
    } 
}  

print_r($total_arr); 
+0

Правильный ответ. И если бы вы хотели, чтобы это немного «короче», можно было бы неправильно использовать тернарный оператор и заменить целую конструкцию if/else просто «isset» ($ total_arr [$ ar ['city'])? $ total_arr [$ ar ['city'] ++: $ total_arr [$ ar ['city'] = 1; ' – CBroe

+0

' isset' обычно всегда быстрее, чем 'array_key_exists', и вам никогда не придется беспокоиться о' NULL 'здесь, поэтому переходите к' isset'. – h2ooooooo

+0

Как ни странно, замена «array_key_exists» на «isset» вызывает ту же неопределенную ошибку индекса. Спасибо за решение ogres! – Solaris76

3

PHP будет высылать это уведомление, если ваш индекс не был инициализирован перед манипуляцией. Используйте символ @ для подавления уведомления или используйте isset() в сочетании с блоком, который инициализирует значение индекса для вас.

Смежные вопросы