Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP可捕获致命错误:传递给的参数1必须是数组类型,给定null,在第208行调用并定义_Php - Fatal编程技术网

PHP可捕获致命错误:传递给的参数1必须是数组类型,给定null,在第208行调用并定义

PHP可捕获致命错误:传递给的参数1必须是数组类型,给定null,在第208行调用并定义,php,Php,我一直面临着一个我无法解决的奇怪问题。长话短说,当我加入一个我正在创建的游戏中的小游戏时,一切都很顺利!但当我退出小游戏时,它会把我送回房间,但它会给我一个错误 这就是错误: PHP可捕获致命错误:参数1传递给 Worter\Server::leaveTable()必须为数组类型,字符串为, 在第208行的/usr/share/nginx/worter/worter/GameHandler.php中调用 并在上的/usr/share/nginx/worter/worter/GameHandler

我一直面临着一个我无法解决的奇怪问题。长话短说,当我加入一个我正在创建的游戏中的小游戏时,一切都很顺利!但当我退出小游戏时,它会把我送回房间,但它会给我一个错误

这就是错误:

PHP可捕获致命错误:参数1传递给 Worter\Server::leaveTable()必须为数组类型,字符串为, 在第208行的/usr/share/nginx/worter/worter/GameHandler.php中调用 并在上的/usr/share/nginx/worter/worter/GameHandler.php中定义 第184行

在提出这个问题之前,我做了一些研究,并尝试了我遇到的解决方案,但遗憾的是,它们没有起作用

GameHandler.php handleLeaveTable:

function handleLeaveTable(Array $arrData, Client $objClient) {
        $intPlayer = $arrData[0];
        $this->leaveTable($intPlayer); // Line 208
    }
 function leaveTable(Array $arrData, Client $objClient) { // Line 184
            $intPlayer = $arrData[4];
            $tableId = $intPlayer->tableId;
            if($tableId !== null) {
                $seatId = array_search($intPlayer, $this->playersByTableId[$tableId]);
                $opponentSeatId = $seatId == 0 ? 1 : 0;
                if(isset($this->playersByTableId[$tableId][$opponentSeatId])) {
                    $this->playersByTableId[$tableId][$opponentSeatId]->addCoins(10);
                   }
                   unset($this->playersByTableId[$tableId][$seatId]);
                   unset($this->tablePopulationById[$tableId][$intPlayer->$strUsername]);
                   $objClient->sendXt('ut', $objClient->getIntRoom(), $tableId, $seatId);
                   $intPlayer->tableId = null;
                   if(count($this->playersByTableId[$tableId]) == 0) {
                    $this->playersByTableId[$tableId] = array();
                    $this->gamesByTableId[$tableId] = null;
               }
        }
    }
GameHandler.php离开表:

function handleLeaveTable(Array $arrData, Client $objClient) {
        $intPlayer = $arrData[0];
        $this->leaveTable($intPlayer); // Line 208
    }
 function leaveTable(Array $arrData, Client $objClient) { // Line 184
            $intPlayer = $arrData[4];
            $tableId = $intPlayer->tableId;
            if($tableId !== null) {
                $seatId = array_search($intPlayer, $this->playersByTableId[$tableId]);
                $opponentSeatId = $seatId == 0 ? 1 : 0;
                if(isset($this->playersByTableId[$tableId][$opponentSeatId])) {
                    $this->playersByTableId[$tableId][$opponentSeatId]->addCoins(10);
                   }
                   unset($this->playersByTableId[$tableId][$seatId]);
                   unset($this->tablePopulationById[$tableId][$intPlayer->$strUsername]);
                   $objClient->sendXt('ut', $objClient->getIntRoom(), $tableId, $seatId);
                   $intPlayer->tableId = null;
                   if(count($this->playersByTableId[$tableId]) == 0) {
                    $this->playersByTableId[$tableId] = array();
                    $this->gamesByTableId[$tableId] = null;
               }
        }
    }
这里的问题是什么?我已经检查了所有问题,但无法找到解决方案

编辑,数据是什么:

function decodeData($strData){
        $arrData = simplexml_load_string($strData, 'SimpleXMLElement', LIBXML_NOCDATA);
        if($arrData === false){
            throw new Exceptions\HandlingException('Unable to parse client\'s XML data');
        }
        $arrData = json_decode(json_encode((array)$arrData), true);
        return $arrData;
    }

function handleData($strData, $objClient){
        $arrData = explode($this->arrConfig['Packets']['Delimiter'], $strData);
        array_pop($arrData);
        foreach($arrData as $strData){
            Silk\Logger::Log('Received data: ' . $strData);
            $strSubstring = substr($strData, 0, 1);
            $blnPossibleXML = $strSubstring == '<' ? true : false;
            $blnPossibleGame = $strSubstring == '%' ? true : false;
            if($blnPossibleXML === false && $blnPossibleGame === false){
                throw new Exceptions\HandlingException('Bad client detected!');
            }
            $blnPossibleXML ?
            $this->handleXMLData($strData, $objClient):
            $this->handleGameData($strData, $objClient);
        }
        unset($arrData);
    }
函数解码数据($strData){
$arrData=simplexml\u load\u字符串($strData,'simplexmlement',LIBXML\u NOCDATA);
如果($arrData==false){
抛出新异常\HandlingException('无法解析客户端的XML数据');
}
$arrData=json_decode(json_encode((数组)$arrData),true);
返回$ARR数据;
}
函数handleData($strData,$objClient){
$arrData=explode($this->arrConfig['Packets']['Delimiter'],$strData);
数组_pop($arrData);
foreach($arrData作为$strData){
Silk\Logger::Log('接收数据:'。$strData);
$strSubstring=substr($strData,0,1);
$blnPossibleXML=$strSubstring=='
PHP可捕获致命错误:参数1传递给
Worter\Server::leaveTable()必须为数组类型,字符串为,
在第208行的/usr/share/nginx/worter/worter/GameHandler.php中调用
并在上的/usr/share/nginx/worter/worter/GameHandler.php中定义
第184行

$arrData
获取第一个元素,即字符串

$intPlayer = $arrData[0];
$this->leaveTable($intPlayer); // Line 208
GameHandler.php handleLeaveTable:

从数组中获取第一个元素

然后在
GameHandler.php离开表中:

您试图以数组的形式访问该元素,然后获取第5个元素

PHP可捕获致命错误:参数1传递给 Worter\Server::leaveTable()必须为数组类型,字符串为, 在第208行的/usr/share/nginx/worter/worter/GameHandler.php中调用 并在上的/usr/share/nginx/worter/worter/GameHandler.php中定义 第184行

$arrData
获取第一个元素,即字符串

$intPlayer = $arrData[0];
$this->leaveTable($intPlayer); // Line 208
GameHandler.php handleLeaveTable:

从数组中获取第一个元素

然后在
GameHandler.php离开表中:


您正在尝试以数组形式访问该元素,然后获取第5个元素,因此我应该将$arrData切换到$objClient或删除$arrData?
$arrData
包含什么?我将为您查找它并编辑我的问题。等等!我看到了,但我仍然不清楚。我需要在这里做什么?在
$this->离开表之前($intPlayer);
添加转储并添加到您的问题中。所以我应该将$arrData与$objClient切换或删除$arrData?
$arrData
包含什么?我将为您查找它并编辑我的问题。等等!我看到了,但我仍然不清楚。我需要在这里做什么?在
$this->leaveTable($intPlayer)之前;
添加转储并将其添加到您的问题中。