2015-09-16 4 views
-1

У меня есть этот массив:PHP array_count_values ​​с многомерным массивом

Array ( 
    [0] => stdClass Object ([id] => 123 [name] => Alex) 
    [1] => stdClass Object ([id] => 124 [name] => John) 
    [2] => stdClass Object ([id] => 123 [name] => Alex) 
    [3] => stdClass Object ([id] => 124 [name] => John) 
    [4] => stdClass Object ([id] => 126 [name] => Paul) 
) 

И я хочу, чтобы вывести как следующее:

Array ( 
    [0] => Array ([id] => 123 [name] => Alex [count] = 2) 
    [1] => Array ([id] => 124 [name] => John [count] = 2) 
    [2] => Array ([id] => 126 [name] => Paul [count] = 1) 
) 

Я попытался с помощью array_count_values($array), но он не работает.

Любые идеи, как это решить?

ответ

1

Вы можете просто использовать array_map наряду с простыми foreach вроде как

foreach(array_map("get_object_vars",$arr) as $val){ 
    $hash = $val['id']; 
    if(isset($result[$hash])){ 
     $result[$hash]['count'] += $result[$hash]['count']; 
    }else{ 
     $result[$hash] = $val; 
     $result[$hash]['count'] = 1; 
    } 
} 
print_r(array_values($result)); 

Выход:

Array 
(
    [0] => Array 
     (
      [id] => 123 
      [name] => Alex 
      [count] => 2 
     ) 

    [1] => Array 
     (
      [id] => 124 
      [name] => John 
      [count] => 2 
     ) 

    [2] => Array 
     (
      [id] => 126 
      [name] => Paul 
      [count] => 1 
     ) 

)