2017-02-11 2 views
0

I wie unten ein mehrdimensionales Array haben,Erhalten Sie einzigartige Anordnung von mehreren Spalten - PHP

und ich möchte ein anderes Array erstellen, das die eindeutige Anzahl der Benutzer pro Stadt zeigt

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 
     ) 
) 

Was ich versuche, zu erhalten, Karte die einmalige Anzahl der Benutzer pro Stadt wie die unten

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

Antwort

1

die Stadt als Index verwenden, und Array USER_NAMES Array als Wert, dann wird der Wert auf lentgth des Wertes.

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

die Lösung unter Verwendung array_reduce Funktion:

// $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); 
Verwandte Themen