2016-12-13 4 views
-1

Ich habe ein Array namens hallo wie folgt,Anzahl einer bestimmten Entität im Array innerhalb eines Arrays erhalten?

hello(
    0 => ([name => abc, add=>def, city=>ny,phone=>12345]); 
    1 => ([name => pqr, add=>mno, city=>qw,phone=>67890]); 
    2 => ([name => abc, add=>def, city=>ny,phone=>14785]); 
    3 => ([name => ghi, add=>foo, city=>yu,phone=>258]); 
    4 => ([name => jkl, add=>exy, city=>ny,phone=>95145]); 
); 

Es hat nur wenige Elemente und die Elemente sind auch Array selbst, wie während Abfrageergebnis retring. Ich möchte einen passenden Namen zählen, der sich wiederholt. Wie in hallo [0] und hallo [2], so sollte mein ans abc = 2 sein.

Wie kann ich das tun?

Danke.

+4

Mögliche Duplikat [Anzahl von doppelten Elemente in einem Array in PHP] (http://stackoverflow.com/questions/13413465/count- von-duplicate-elements-in-array-in-php) – Jigar7521

+0

(Was hast du versucht?) – greybeard

Antwort

0

Edit 2: Jetzt wollen Sie eine Möglichkeit, alle Objekte zu zählen:

$arr = [ 
    0 => (object) ['name' => 'abc', 'add'=>'def', 'city'=>'ny', 'phone'=>'12345'], 
    1 => (object) ['name' => 'pqr', 'add'=>'mno', 'city'=>'qw', 'phone'=>'67890'], 
    2 => (object) ['name' => 'abc', 'add'=>'def', 'city'=>'ny', 'phone'=>'14785'], 
    3 => (object) ['name' => 'ghi', 'add'=>'foo', 'city'=>'yu', 'phone'=>'258'], 
    4 => (object) ['name' => 'jkl', 'add'=>'exy', 'city'=>'ny', 'phone'=>'95145'], 
]; 

function countBy (callable $f, $xs) { 
    return array_reduce($xs, function ($acc, $x) use ($f) { 
    $y = call_user_func($f, $x); 
    $acc[$y] = isset($acc[$y]) ? $acc[$y] + 1 : 1; 
    return $acc; 
    }, []); 
} 

json_encode(countBy (function ($x) { return $x->name; }, $arr)); 
// => { "abc": 2, "pqr": 1, "ghi": 1, "jkl": 1 } 

Edit: Sie Typen über die Daten belogen so änderte ich $x['name']-$x->name und $x[$attr]


Sie können array_reduce

array_reduce($arr, function ($acc, $x) { 
    return $x->name === 'abc' ? $acc + 1 : $acc; 
}, 0); 
// => 2 

verwenden oder als Funktion schreiben

function countAttr($attr, $match, $xs) { 
    return array_reduce($xs, function ($acc, $x) use ($attr, $match) { 
    return $x->{$attr} === $match ? $acc + 1 : $acc; 
    }, 0); 
} 

countAttr('name', 'abc', $arr)(
// => 2 
+0

es wird funktionieren, aber das Array ist so dynamisch, ich kann nicht angeben "=== abc". – chigs

+0

Ok Ich stellte eine Funktion zur Verfügung – naomik

+0

returns array "Kann nicht Objekt vom Typ stdClass als Array verwenden" – chigs

-1
// hello , please use some standard name for array 
// code not tested 
// define variable if required 
$field_name="name"; 
$value="abc"; 
$count=0; 
echo count_field($field_name,$value); 
function count_field($field_name,$value) 
{ 
foreach($hello as $val) 
{ 
    if($val[$field_name]==$value) 
    { 
    $count++; 
    } 
} 
return $count; 
} 
0

In diesem Fall eine function definieren besten wäre so cen, dass Graf für einen beliebigen Namen bekommen sein. Sie können versuchen, diese -

$array = [ 
    0 => ['name' => 'abc', 'add'=>'def', 'city'=>'ny','phone'=>'12345'], 
    1 => ['name' => 'pqr', 'add'=>'mno', 'city'=>'qw','phone'=>'67890'], 
    2 => ['name' => 'abc', 'add'=>'def', 'city'=>'ny','phone'=>'14785'], 
    3 => ['name' => 'ghi', 'add'=>'foo', 'city'=>'yu','phone'=>'258'], 
    4 => ['name' => 'jkl', 'add'=>'exy', 'city'=>'ny','phone'=>'95145'], 
]; 
function get_name_count($array, $name) 
{ 
    // filter array for name 
    $temp = array_filter($array, function($a) use($name) { 
     return ($a['name'] === $name); 
    }); 
    // return count 
    return count($temp); 
} 

var_dump(get_name_count($array, 'abc')); 

Ausgabe

int(2) 
+0

Er/sie log über die Eingabedaten, so dass dies aus dem gleichen Grund fehlschlägt, wie meine ursprüngliche Antwort. Schöne Antwort sonst^_^ – naomik

+0

Ich denke auch so. :) –

Verwandte Themen