Count (): параметр должен быть массивом или объектом, который реализует счетную ошибку, как исправить? - PullRequest
0 голосов
/ 02 мая 2020

Попытка переместить мой PHP код из другого проекта в Laravel.

Кажется, есть проблема с этой строкой кода:

<h6><span class="label label-info">@php if (count($Players) == 0){echo "There is no one online";} else {echo "There is currently ". count( $Players ) . "/". $Info[ 'MaxPlayers' ]. " users online";}@endphp</span></h6>

Выплевывает эту ошибку здесь

count(): Parameter must be an array or an object that implements Countable

Вот мой php код:

$Map    = Array([3]);
$Rules   = Array( );
$Players = Array( );


try
{
    $Query->Connect( SQ_SERVER_ADDR, SQ_SERVER_PORT, SQ_TIMEOUT, SQ_ENGINE );
    $Info    = $Query->GetInfo( );
    $Players = $Query->GetPlayers( );
    $Rules   = $Query->GetRules( );
}

Ответы [ 2 ]

0 голосов
/ 02 мая 2020

Это не проблема laravel. В PHP 7.3 была добавлена ​​новая функция is_countable, специально для решения проблемы E_WARNING и распространенности приложений, принимающих is_array($var) || $var instanceof \Countable в своем коде.

Так что если $ Players null, вы получаете ошибку. Быстрый способ: (массив) $ игроков. Правильный путь:

if (!isset($Players) OR !is_array(($Players)) OR count($Players) == 0)

Кстати, если вы используете лезвие, пожалуйста, используйте директивы. Так что не используйте @ php

@if (!isset($Players) OR !is_array(($Players)) OR count($Players) == 0)
There is no one online
@else
There is currently {{ count( $Players ) }}/{{ $Info[ 'MaxPlayers' ] }} users online
@endif
0 голосов
/ 02 мая 2020

Вы можете преобразовать объект в массив. в Laravel вы можете использовать функцию toArray (). в PHP $array = (array) $yourObject;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...