首页 > 解决方案 > 将元素添加到关联数组会引发错误 - php

问题描述

我的数据库中有一个 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 上运行

问候安德烈亚斯

标签: php

解决方案


您的问题是您对json_decode. 因为您没有将第二个参数作为 true 传递,所以它返回一个对象,然后您尝试将其用作数组,从而导致您看到的错误。如果您print_r($tokenarray);在 之后的代码中添加了a 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());

推荐阅读