使用特定的字符串值对数组元素进行计数

时间:2019-08-30 05:52:48

标签: php

我有这个输出:

{
"results": [
    {
        "url": "https:1783.json",
        "id": 1783,        
        "created_at": "2019-08-29T13:52:47Z",
        "status": "open",
        "recipient": null,
    },
    {
        "url": "https:1781.json",
        "id": 1781,
        "created_at": "2019-08-29T10:21:57Z",
        "status": "open",
        "recipient": null,            
    },
    etc...

我要做的就是用打开

状态计算元素的数量
  

“状态”:“打开”,

这是我到目前为止所拥有的:

$result = json_decode($result, true);
echo count(array_keys($result, "open"));

但是它输出 0

谢谢

3 个答案:

答案 0 :(得分:2)

您可以采用两种方法,解决当前问题意味着必须从数据的status元素中提取results列,然后使用array_keys()作为当前数组它正在查看错误的级别...

echo count(array_keys(array_column($result['results'], 'status'), "open"));

这很短,但是还涉及处理整个数组几次。

或者,一个简单的foreach()循环仅在每次计算其后的值时才进行计数...

$count = 0;
foreach ( $result['results'] as $res )  {
    if ( $res['status'] == 'open' ) {
        $count++;
    }
}
echo $count;

此(IMHO)更快,更易读。

答案 1 :(得分:1)

您可以将countarray_filter一起使用,如下所示,

echo count(array_filter($arr['results'], function ($val) {return $val['status'] == 'open';}));

Demo

输出

2
  

注意:您的json无效。

答案 2 :(得分:0)

$array = array("test","test1","test");
$counts = array_count_values($array);
echo $counts['test'];