我希望在将json对象发送回我的应用程序之前向json对象添加更多信息。
$sql = "SELECT * FROM users WHERE repo=?";
$q=$dbh->prepare($sql);
$q->execute(array($repo));
$res = $q->fetchAll(PDO::FETCH_OBJ);
$res['isnew']="1"; //this part isn't working
echo '{"items":'. json_encode($res) .'}';
当我回显($ res)
时,PDO查询返回这样的结果集 Array{"items":[{"uid":"10","repo":"bnef"}]}
然后它被编码回jquery- echo'{“items”:'。 json_encode($ res)。'}'; 给我
{"items":[{"uid":"10","repo":"bnef}]}
我想添加“isnew”:“1”,但是当我尝试时 $ RES [ '是否新款'] = “1”;或者array_merge我最终得到了
{"items":{"0":{"uid":"10","repo":"bnef"},"isnew":"1"}}
哪个不起作用。我需要
{"items":[{"uid":"10","repo":"bnef, "isnew":"1"}]}
我是否误导尝试这样做?
答案 0 :(得分:0)
我误解了你的问题,并对代码感到困惑......你最近要对数组进行处理,请尝试以下方法:
$sql = "SELECT * FROM users WHERE repo=?";
$q=$dbh->prepare($sql);
$q->execute(array($repo));
$items = $q->fetchAll(PDO::FETCH_OBJ);
// you actually wnt isnew as a property of each row
// so you need to loop over the results
foreach($items as $key => $item){
$item->isnew = 1;
}
echo json_encode(array(
'items' => $items
));
$res = $q->fetchAll(PDO::FETCH_OBJ);
$res['isnew']="1"; //this part isn't working
它无效,因为您使用了FETCH_OBJ
而不是FETCH_ASSOC
,因此您需要使用StdObject
实例而不是数组。在这种情况下,您需要使用->
分配:
$res = $q->fetchAll(PDO::FETCH_OBJ);
$res->isnew = "1";
或者你可以获取一个关联数组:
$res = $q->fetchAll(PDO::FETCH_ASSOC);
$res['isnew']="1"; //this will work now
Additionalyl我不会尝试操纵JSON序列化字符串。我会原生地进行所有修改:
$items = array(
'items' => $res
);
echo json_encode($items);