我的数据库中有一个json编码的数组,我想向其中添加元素。来自数据库的json看起来像这样:
{"1549006986":"a27f51b4dba8899c7a278465a873449a"}
以下是我要添加元素的代码:
$tokenarray = json_decode($_SESSION['logintoken']);
$counttokens = count($tokenarray);
$newtoken = md5(mt_rand());
$datetime = $_SERVER['REQUEST_TIME'];
if ($counttokens < 6){
$tokenarray += [$datetime => $newtoken];
}
$tokenarrayjson = json_encode($tokenarray);
但是这行
$tokenarray += [$datetime => $newtoken];
最终出现此错误:
Fatal error: Uncaught Error: Unsupported operand types in **SITEURL** Stack trace: #0 {main} thrown in **SITEURL** on line
有人可以告诉我这里错了吗?从该站点上的另一篇文章中,将类似元素添加到数组应该从php版本5.4开始有效。我在7.2上运行
有关事项
答案 0 :(得分:2)
您的问题是您致电json_decode
。由于尚未将第二个参数传递为true,因此它返回一个对象,然后尝试将该对象用作数组,从而导致您看到的错误。如果您在print_r($tokenarray);
之后的代码中放置了json_decode
,您将看到以下内容:
stdClass Object (
[1549006986] => a27f51b4dba8899c7a278465a873449a
)
要解决此问题,请更改:
$tokenarray = json_decode($_SESSION['logintoken']);
到
$tokenarray = json_decode($_SESSION['logintoken'], true);
您的代码中也有错字,
newtoken = md5(mt_rand());
应该是
$newtoken = md5(mt_rand());
答案 1 :(得分:-1)
使用此
$tokenarray[$datetime] = $newtoken;
答案 2 :(得分:-1)
我想您的newtoken声明有问题。
newtoken = md5(mt_rand());
您忘记将$放在newtoken变量之前