Вопрос обновлен, чтобы уточнить
Для простых массивов мне удобно использовать $arr[$key]++
для заполнения нового элемента или увеличения существующего элемента. Например, подсчитывая количество фруктов, $arr['apple']++
создаст элемент массива $arr('apple'=>1)
когда впервые встречается «яблоко». Последующие итерации просто увеличивают значение для «яблока». Нет необходимости добавлять код, чтобы проверить, существует ли ключ «яблоко».
Я заполняю массив массивов и хочу добиться аналогичного «однострочного», как в примере выше, в элементе вложенного массива.
$stats
– массив. Каждый элемент в $stats
– это еще один массив с 2 ключами («имя» и «счет»)
Я хочу, чтобы можно было массировать массив в $stats
– если ключ уже существует, просто увеличивайте значение «count». Если он не существует, создайте новый массив элементов и установите значение count равным 1. И сделайте это в одной строке, как и в примере выше для простого массива.
В коде это будет выглядеть примерно так (но не работает):
$stats[$key] = array('name'=>$name,'count'=>++); or $stats[$key] = array('name'=>$name,++);
Ищете идеи о том, как достичь этого, без необходимости проверять, существует ли элемент.
Задний план:
Я перемещаюсь по массиву объектов, глядя на элемент данных в каждом из них. Вот отрезок из массива:
[1] => stdClass Object ( [to] => stdClass Object ( [data] => Array ( [0] => stdClass Object ( [name] => foobar [id] => 1234 ) ) )
Я хотел бы подсчитать вхождения «id» и соотнести его с «именем». («id» и «name» являются уникальными комбинациями – например, name = «foobar» всегда будет иметь id = 1234)
т.е.
id name count 1234 foobar 55 6789 raboof 99
Я использую массив массивов на данный момент, $stats
, чтобы захватить информацию (я открываю для других реализаций. Я смотрел в array_unique
но мои исходные данные были глубоко внутри массивов и объектов).
В первый раз, когда я сталкиваюсь с «id» (например, 1234), я создам новый массив в $stats
и установлю счетчик равным 1. Для последующих обращений (например: id = 1234) я просто хочу увеличить count
.
Для одномерных массивов $arr[$obj->id]++
отлично работает, но я не могу понять, как нажимать / увеличивать массив массивов. Как я могу нажимать / увеличивать в одной строке многомерные массивы?
Заранее спасибо.
$stats = array(); foreach ($dataArray as $element) { $obj = $element->to->data[0]; // this next line does not meet my needs, it's just to demonstrate the structure of the array $stats[$obj->id] = array('name'=>$obj->name,'count'=>1); // this next line obviously does not work, it's what I need to get working $stats[$obj->id] = array('name'=>$obj->name,'count'=>++); }