【问题标题】:Counting entries in sub/subarray计算子/子数组中的条目
【发布时间】:2021-01-06 00:07:53
【问题描述】:

我正在聊天。 我有一个包含有关房间信息的数组 (在下面的示例中,2 个房间(休息室、海滩))。

当我有一个空房间(在示例中为海滩)时,我遇到了问题,因为它默认不包含任何用户(即 Null 用户)。

$roomNusers=Array ( 
  [The Lounge] => 
        Array ( [id] => 1 
                [privacy] => public 
                [users] => Array 
                   [QUICHE POIREAU] => Array
                       [smiley] => smi_smile.gif
                       [name] => QUICHE POIREAU 
                       [state] => NULL
                       [id] => 1 ) 
                   [JOHN DOE] => Array
                       [smiley] => smi_smile.gif 
                       [name] => Joe FRANC 
                       [state] => 
                       [id] => 40 )
   [The Beach] => Array
      [id] => 2 
      [privacy] => public 
      [users] => Array 
           [Null] => Array 
                 [smiley] => Null
                 [name] => Null
                 [state] => Null
                 [id] => Null

我试图在我的数组中计算房间中当前存在的用户数量。 环顾 Stack Overflow,我设法找到了我想要的解决方案:

foreach($roomNusers as $room => $value)
    {
      echo $room.' user count:'.count($room['users'])
    }

这个输出:

The lounge user count: 2
The beach user count: 1

我的问题是它计算了海滩上的用户 [null]。

如何计算每个房间的非空用户数?

我想到了一个类似的解决方法:

$countperroom= .count($room['users'])-1;
if(isset(end([$room]['users']))){$countuser+1;}

这里最后一个用户是空的,我不加用户,但是不知道这个怎么写。

【问题讨论】:

    标签: php arrays


    【解决方案1】:

    除了计算$room['users']中的值的数量,您可以在过滤它们以删除空键后计算键的数量:

    foreach ($rooms as $name => $room) {
        $users = count(array_filter(array_keys($room['users'])));
        echo "$name: $users users\n";
    }
    

    输出(用于您的样本数据):

    The Lounge: 2 users
    The Beach: 0 users
    

    Demo on 3v4l.org

    【讨论】:

    • 太好了,非常感谢您的意见,非常感谢您花时间创建示例!
    • @Quiche 不用担心 - 我很高兴能帮上忙。
    猜你喜欢
    • 2018-03-20
    • 2015-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-19
    • 1970-01-01
    相关资源
    最近更新 更多