【发布时间】:2014-05-17 16:15:25
【问题描述】:
我已经为social media website I'm working on 创建了一个“喜欢”系统,但我在使用 json_encode 和 json_decode 时遇到了一些问题。我使用数组来存储点赞帖子的人,所以我需要这两个函数来使其可存储,但由于某种原因,它有时会将对象保存到数据库中:
{"1":"admin"}
而不是一个数组(我想要的):
["admin"]
这是我的代码:
if ($liked_by == NULL){ $liked_by = Array(); }
if (! in_array($user, $liked_by)){
$liked_by[] = $user;
$likes = $row['likes']+1;
$liked_by = json_encode($liked_by);
mysql_query("UPDATE $stream SET liked_by = '$liked_by' WHERE id = ".$id, $db)
or die(mysql_error($db));
mysql_query("UPDATE $stream SET likes = '$likes' WHERE id = ".$id, $db)
or die(mysql_error($db));
} else{
if(($liker = array_search($user, $liked_by)) !== false) {
unset($liked_by[$liker]);
}
$likes = $row['likes']-1;
$liked_by = json_encode($liked_by);
mysql_query("UPDATE $stream SET liked_by = '$liked_by' WHERE id = ".$id, $db)
or die(mysql_error($db));
mysql_query("UPDATE $stream SET likes = '$likes' WHERE id = ".$id, $db)
or die(mysql_error($db));
}
很抱歉使用了已弃用的 mysql 函数...
我只是不确定发生了什么。 提前致谢。
【问题讨论】:
-
没关系,因为您可以将其作为
json_decode($data,true)作为数组取回 -
您的示例中似乎缺少零索引,这可能会导致问题,原因可能是您的
unset()电话。一个简单的解决方案是在编码之前调用array_values()。 -
^ 请参阅
json_dencode()的文档。 -
这不会一直发生,它似乎只是随机发生。
-
@Sirko 你是什么意思?