Php 计算对象数组数组列中某个值的出现次数

Php 计算对象数组数组列中某个值的出现次数,php,facebook-graph-api,multidimensional-array,count,find-occurrences,Php,Facebook Graph Api,Multidimensional Array,Count,Find Occurrences,是否有人知道如何计算此数组中“photo”的出现次数: Array ( [0] => stdClass Object ( [type] => photo [id] => 1404781893036 [created_time] => 2012-03-02T07:58:23+0000 ) [1] => stdClass Object ( [type] => photo [id] => 14047818930362 [create

是否有人知道如何计算此数组中“photo”的出现次数:

    Array ( 
    [0] => stdClass Object ( [type] => photo [id] => 1404781893036 [created_time] => 2012-03-02T07:58:23+0000 ) 
    [1] => stdClass Object ( [type] => photo [id] => 14047818930362 [created_time] => 2012-03-01T14:58:53+0000 ) 
    [2] => stdClass Object ( [type] => status [id] => 1404781893036 [created_time] => 2012-03-01T09:49:40+0000 ) 
    [3] => stdClass Object ( [type] => status [id] => 14047818930362 [created_time] => 2012-03-01T09:36:04+0000 ) 
    [4] => stdClass Object ( [type] => photo [id] => 14047818930362 [created_time] => 2012-02-28T07:03:25+0000 ) 
    [5] => stdClass Object ( [type] => photo [id] => 1404781893036 [created_time] => 2012-02-27T09:15:34+0000 ) 
    [6] => stdClass Object ( [type] => photo [id] => 14047818930362 [created_time] => 2012-02-27T07:32:13+0000 ) 
    [7] => stdClass Object ( [type] => status [id] => 1404781893036 [created_time] => 2012-02-25T09:36:57+0000 )
    [8] => stdClass Object ( [type] => photo [id] => 1404781893036 [created_time] => 2012-02-23T08:46:43+0000 ) 
    [9] => stdClass Object ( [type] => status [id] => 1404781893036 [created_time] => 2012-02-22T21:04:30+0000 ) 
    [10] => stdClass Object ( [type] => status [id] => 1404781893036 [created_time] => 2012-02-21T20:38:27+0000 )
    [11] => stdClass Object ( [type] => photo [id] => 1404781893036 [created_time] => 2012-02-21T07:22:44+0000 ) 
    [12] => stdClass Object ( [type] => status [id] => 14047818930362 [created_time] => 2012-02-20T08:32:46+0000 ) 
    [13] => stdClass Object ( [type] => status [id] => 1404781893036 [created_time] => 2012-02-17T15:00:11+0000 ) )
尝试:

$input = array( /* your data */ );
$count = 0;
foreach ( $input as $value ) {
  if ( $value->type == 'photo' ) {
    $count++;
  }
}

要计算多维数组中字符串的匹配次数,需要迭代每个数组元素,匹配字符串并增加计数。同样地,@Dor建议

$count = 0;
foreach ($array as $item) {
  if ($item->type === 'photo') {
    $count++;
  }
}
如果您想在一维数组中实现同样的效果,那么它非常简单。您可以使用PHP数组函数,如下所述

<?php
   $array = array(1, "test", 1, "php", "test");
   print_r(array_count_values($array));
?>

我想承认Dor Shemer的方法是(IMO)最直接、干净、可读和可靠的方法。我只想为那些喜欢使用函数式编程的人提供一些选择…
array\u reduce()
对我来说是第二个选择。最后,我想指出使用
array\u count\u values()
的方法的一个小问题——请继续阅读

一组方法:()

使用OP的样本数据输入/输出(无故障):

使用无
photo
值的数据输入/输出(第二种
数组计数值()方法有问题):

$array=[
(对象)['type'=>'status','id'=>1404781893036,'created_time'=>'2012-03-01T09:49:40+0000'],
(对象)['type'=>'status','id'=>14047818930362,'created_time'=>'2012-03-01T09:36:04+0000'],
(对象)['type'=>'status','id'=>1404781893036,'created_time'=>'2012-02-25T09:36:57+0000'],
(对象)['type'=>'status','id'=>1404781893036,'created_time'=>'2012-02-22T21:04:30+0000'],
(对象)['type'=>'status','id'=>1404781893036,'created_time'=>'2012-02-21T20:38:27+0000'],
(对象)['type'=>'status','id'=>14047818930362,'created_time'=>'2012-02-20T08:32:46+0000'],
(对象)['type'=>'status','id'=>1404781893036,'created_time'=>'2012-02-17T15:00:11+0000']
];
//或者,如果没有像:$array=[]这样的对象行;
//输出:
foreach结果=0
数组_reduce=0
数组\过滤器和计数=0
数组\列和数组\过滤器和计数=0
数组映射和数组计数值和数组替换=0
数组\映射和数组\计数\值(发出通知)=
注意:未定义索引:第43行[…][…]中的照片

array\u count\u value()
不用费心生成计数为
0
的元素。

每当遇到类型为class='photo'的元素时,迭代数组并增加一个ctrPhoto。这应该是正确的答案,因为它更简单,避免手动迭代。这个答案并不特定于OP的问题,而Dor Shemer专门回答了他的问题因此,为什么他的答案是公认的。不管怎样,我现在为什么在SOF上搜索的答案是这个so+1。你的答案只适用于字符串和/或整数数组,而不适用于OP问题中的对象数组。这是错误问题的正确答案。此答案不适用于OP的多级数据结构或与数据相似。它也不会隔离请求的值计数——它会为一维数组中的所有值输出计数。此技术作为独立函数调用也会失败,因为如果查找的值不存在,则该值将不会列在输出数组中。这意味着需要额外的处理来提供默认值
0
。虽然我的否决票不会削弱这个56票赞成的答案,但我觉得我必须在原则上否决。
<?php
   $array = array(1, "test", 1, "php", "test");
   print_r(array_count_values($array));
?>
Array
(
    [1] => 2
    [test] => 2
    [php] => 1
)
$photo_count=0;  // establish default value
foreach($array as $objects){
    if($objects->type==='photo') ++$photo_count;  // pre-increment
}
echo "foreach result = $photo_count";

echo "array_reduce = ",array_reduce($array,function($carry,$objects){return $carry+($objects->type==='photo'?1:0);},0);

echo "array_filter & count = ",sizeof(array_filter($array,function($objects){return $objects->type==='photo';}));

echo "array_column & array_filter & count = ",sizeof(array_filter(array_column($array,'type'),function($v){return $v==='photo';}));

echo "array_map & array_count_values & array_replace = ",array_replace(['photo'=>0],array_count_values(array_map(function($o) {return $o->type;}, $array)))['photo'];

echo "array_map & array_count_values (gives Notice) = ",array_count_values(array_map(function($o) {return $o->type;}, $array))['photo'];
$array=[
    (object)['type'=>'photo','id'=>1404781893036,'created_time'=>'2012-03-02T07:58:23+0000'],
    (object)['type'=>'photo','id'=>14047818930362,'created_time'=>'2012-03-01T14:58:53+0000'],
    (object)['type'=>'status','id'=>1404781893036,'created_time'=>'2012-03-01T09:49:40+0000'],
    (object)['type'=>'status','id'=>14047818930362,'created_time'=>'2012-03-01T09:36:04+0000'],
    (object)['type'=>'photo','id'=>14047818930362,'created_time'=>'2012-02-28T07:03:25+0000'],
    (object)['type'=>'photo','id'=>1404781893036,'created_time'=>'2012-02-27T09:15:34+0000'],
    (object)['type'=>'photo','id'=>14047818930362,'created_time'=>'2012-02-27T07:32:13+0000'],
    (object)['type'=>'status','id'=>1404781893036,'created_time'=>'2012-02-25T09:36:57+0000'],
    (object)['type'=>'photo','id'=>1404781893036,'created_time'=>'2012-02-23T08:46:43+0000'],
    (object)['type'=>'status','id'=>1404781893036,'created_time'=>'2012-02-22T21:04:30+0000'],
    (object)['type'=>'status','id'=>1404781893036,'created_time'=>'2012-02-21T20:38:27+0000'],
    (object)['type'=>'photo','id'=>1404781893036,'created_time'=>'2012-02-21T07:22:44+0000'],
    (object)['type'=>'status','id'=>14047818930362,'created_time'=>'2012-02-20T08:32:46+0000'],
    (object)['type'=>'status','id'=>1404781893036,'created_time'=>'2012-02-17T15:00:11+0000']
];

// output:
foreach result = 7

array_reduce = 7

array_filter & count = 7

array_column & array_filter & count = 7

array_map & array_count_values & array_replace = 7

array_map & array_count_values = 7
$array=[
    (object)['type'=>'status','id'=>1404781893036,'created_time'=>'2012-03-01T09:49:40+0000'],
    (object)['type'=>'status','id'=>14047818930362,'created_time'=>'2012-03-01T09:36:04+0000'],
    (object)['type'=>'status','id'=>1404781893036,'created_time'=>'2012-02-25T09:36:57+0000'],
    (object)['type'=>'status','id'=>1404781893036,'created_time'=>'2012-02-22T21:04:30+0000'],
    (object)['type'=>'status','id'=>1404781893036,'created_time'=>'2012-02-21T20:38:27+0000'],
    (object)['type'=>'status','id'=>14047818930362,'created_time'=>'2012-02-20T08:32:46+0000'],
    (object)['type'=>'status','id'=>1404781893036,'created_time'=>'2012-02-17T15:00:11+0000']
];
// or if there are no object rows like: $array=[];
// output:
foreach result = 0

array_reduce = 0

array_filter & count = 0

array_column & array_filter & count = 0

array_map & array_count_values & array_replace = 0

array_map & array_count_values (gives Notice) = <br />
<b>Notice</b>:  Undefined index: photo in <b>[...][...]</b> on line <b>43</b><br />