2016-12-13 9 views
-1

次のように私はそれはいくつかの要素を持っており、要素は、クエリ結果をretringながらのような配列自体、あること配列内の配列内の特定のエンティティの数を取得しますか?

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

、配列という名前のハローを持っています。 私は反復するperticular名を数えたいと思う。 hello [0]やhello [2]のように、私のansはabc = 2でなければなりません。

どうすればいいですか?

ありがとうございました。

+4

[PHPの配列内の重複する要素の数]の可能な重複(http://stackoverflow.com/questions/13413465/count-配列内の要素を複製する – Jigar7521

+0

(何を試しましたか) – greybeard

答えて

0

編集2: 今、あなたはすべてのオブジェクトカウントする方法たい:私は$x->name$x['name']を変更するようにするには、データ型について嘘をついた と:

$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 } 

編集を$x[$attr]$x->{$name}


あなたは、任意の名前のためにそのカウントがCEN入手可能ので最高になりfunctionを定義する。この場合、関数として

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

配列は動的ですので、 "=== abc"を指定することはできません。 – chigs

+0

Ok関数を使用しました – naomik

+0

配列を返します "配列として型stdClassを使用できません" – 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

array_reduce

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

を使用するか、それを書くことができます。あなたはこれを試すことができます -

$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')); 

出力

int(2) 
+0

彼は入力データについて嘘をついたので、元の答えと同じ理由で失敗します。そうでなければニースの答えは^ _^ – naomik

+0

私もそうだね。 :) –

関連する問題