1

我的数组在下面。我想要做的是计算数组中对于 read_status 有 null 或“新”的节点数。

有什么比遍历数组更充分的吗?

Array
(
    [0] => Array
        (
            [id] => 428
            [read_status] => 
        )

    [1] => Array
        (
            [id] => 427
            [read_status] => 
        )
    [2] => Array
        (
            [id] => 441
            [read_status] => new
        )  
    [3] => Array
        (
            [id] => 341
            [read_status] => read
        )  
)

所以计数应该是3。

4

3 回答 3

2

你可以做

$count = count(array_filter($myArray, function($item){
    return $item['read_status'] != 'new';
}));

echo $count;

但我认为像这样循环遍历它更有效:

$count = 0;
foreach($myArray as $item){
    if($item['read_status'] != 'new')$count++;
}

echo $count;
于 2013-06-28T16:37:29.540 回答
1

在数组中循环执行此操作没有任何问题,它实际上可能比使用通用方法为您执行此操作更快。就是这样:

$count = 0;
foreach ($arrays as $entry)
{
    if (!$entry['read_status'] || $entry['read_status'] === "new")
    {
        $count++;
    }
}

echo $count;
于 2013-06-28T16:36:44.847 回答
0

实际上,我通过完全删除 null 来改进我的 SQL ——所以现在 read_status 要么是读取的,要么是新的。

IF(feed_read.read_status IS NULL,'new','read') AS read_status

从那里,我能够利用另一个 SO 问题来计算“新”元素。

$counted = array_count_values(array_map(function($value){return $value['read_status'];}, $result));
echo $counted['new'];
于 2013-06-28T16:41:41.840 回答