2015-12-04 2 views
0

У меня есть массив, который выглядит следующим образом:Как я могу подсчитать и уменьшить значение значения в массиве?

Array 
(
    [0] => Array 
     (
      [name] => test 
      [...] => ... 
     ) 

    [1] => Array 
     (
      [name] => wine 
      [...] => ... 

     ) 
    [2] => Array 
     (
      [name] => wine 
      [...] => ... 
     ) 

) 

Теперь, что я хочу достичь что-то вроде этого:

Array 
(
    [0] => Array 
     (
      [name] => test 
      [occurrence] => 1 
      [...] => ... 
     ) 

    [1] => Array 
     (
      [name] => wine 
      [occurence] => 2 
      [...] => ... 
     ) 

) 

Короче говоря, я хочу дедуплицировать элементы, основанные на уникальной name ключ, и я хочу добавить счетчик occurrence к результату, который говорит мне, как часто каждый элемент произошел. Элементы имеют гораздо больше ключей, которые должны быть сохранены (сохранение значений первого вхождения в порядке).

+0

На каком ключе вы считаете дубликат (только на ключ имени), а также какой идентификатор будет иметь этот результирующий элемент массива? – Standej

+1

Извините, у меня мало терпения, прокручивая назад и вперед, чтобы определить разницу в ваших массивах. Упрощенный образец будет очень приветствуем. Однако в общем случае для дедупликации массивов используйте id как ключ: '$ deduped [$ item ['name']] = $ item'. Просто переверните все элементы, установив ключ в новый массив, который легко позволяет проверить, существует ли значение или нет, и соответственно увеличивать счетчик. – deceze

+0

@Standej ключ - это «имя», и было бы неплохо сохранить первое появление дублированных элементов. – Jacques

ответ

2
$result = []; 
foreach ($array as $item) { 
    if (!isset($result[$item['name']])) { 
     $result[$item['name']] = $item; 
     $result[$item['name']]['occurrence'] = 1; 
    } else { 
     $result[$item['name']]['occurrence']++; 
    } 
} 

Просто используйте тот факт, что ключи массива являются уникальными, и вы будете иметь ваши данные дедупликации в одной итерации цикла.

+0

Спасибо, сэр, очень ценим. – Jacques

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