Подсчет записей в вложенном / подмассиве

#php #arrays

#php #массивы

Вопрос:

Я работаю над чатом. У меня есть массив, содержащий информацию о комнате (в приведенном ниже примере 2 комнаты (гостиная, пляж)).

У меня проблема, когда у меня есть пустая комната (в примере the beach), поскольку в ней по умолчанию нет пользователя (который является нулевым пользователем).

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

В этом случае последний пользователь пуст, я не добавляю пользователя, но я не знаю, как это написать.

Ответ №1:

Вместо подсчета количества значений в $room['users'] , вы можете подсчитать количество ключей после их фильтрации, чтобы удалить пустые ключи:

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

Вывод (для ваших выборочных данных):

 The Lounge: 2 users
The Beach: 0 users
 

Демонстрация на 3v4l.org

Комментарии:

1. отлично, большое вам спасибо за ваш вклад, и я действительно оценил время, которое вы потратили на создание примера! <3