2017-02-11 3 views
0

У меня есть многомерный массив, как показано ниже,Получить уникальный массив по нескольким столбцам - PHP

, и я хочу, чтобы создать еще один массив, который показывает уникальное число пользователей в город

Array 
(
    [0] => Array 
     (
      [id] => 1 
      [city] => Melbourne 
      [date_added] => 1435852550 
      [user_name] => user_1 
     ) 

    [1] => Array 
     (
      [id] => 2 
      [city] => Melbourne 
      [date_added] => 1435852550 
      [user_name] => user_1 
     ) 

    [2] => Array 
     (
      [id] => 3 
      [city] => Sydeny 
      [date_added] => 1435852550 
      [user_name] => user_2 
     ) 

    [3] => Array 
     (
      [id] => 4 
      [city] => Perth 
      [date_added] => 1435852550 
      [user_name] => user_3 
     ) 
    [4] => Array 
     (
      [id] => 5 
      [city] => Perth 
      [date_added] => 1435852550 
      [user_name] => user_4 
     ) 
) 

То, что я пытаюсь чтобы получить, уникальное ЧИСЛО пользователей за город, как ниже

Array 
(
    [Melbourne] => 1 
    [Sydeny] => 1 
    [Perth] => 2 
) 

ответ

1

использовать город как индекс, и USER_NAMES массива массив в качестве значения, а затем отобразить значение lentgth значения.

foreach($array as $v) 
{ 
    $temp[$v['city']][$v['user_name']] = 1; 
} 
$result = array_map(function($v){return count($v);}, $temp); 
0

Решение с помощью функции array_reduce:

// $arr is your initial array 

$hash = []; 
$counts = array_reduce($arr, function($r, $a) use(&$hash){ 
    $hash_str = $a['city'] .'|'. $a['user_name']; 
    if (!in_array($hash_str, $hash)) { 
     $hash[] = $hash_str; 
     (!isset($r[$a['city']]))? $r[$a['city']] = 1 : $r[$a['city']] += 1; 
    } 
    return $r; 
}, []); 

print_r($counts); 
Смежные вопросы