我有这段代码
$data['events'] = $this->calendar_model->get_events();
foreach ($data['events'] as $arr) {
settype($arr,"array");
$arr['something'] = false;
//print_r($arr);
}
echo json_encode($arr);
我要做的是添加一些东西=>对于数组的每个记录都是false 所以我想说我是从数据库中得到的
的数组title:"aaaaa",
start: "xxxx",
end: "cccc",
我想为每一个添加一些内容:false变得像
title:"aaaaa",
start: "xxxx",
end: "cccc",
something,false
每条记录
但问题是当我使用print_r
进行打印时它很好,但json_encode
仅打印最后一个。
答案 0 :(得分:3)
您在$arr
循环中按值传递了foreach
。尝试通过引用传递它。
这是通过在循环声明中的&
变量之前添加$arr
来完成的:
foreach ($data['events'] as &$arr) {
settype($arr,"array");
$arr['something'] = false;
}
echo json_encode($data['events']);
按值传递表示您的foreach循环实例化本地副本或您的数组。在循环内进行的所有修改都只会影响本地副本。
通过引用传递表示在循环内部,您正在直接在原始数组上工作。但这样做时要小心,因为它可能很危险。例如,我不知道为您的其余代码调用setType($arr,"array");
会产生什么后果。
答案 1 :(得分:0)
你没有从循环的每次迭代中收集$arr
到任何东西。您可能希望将$arr
推送到另一个存储所有内容的数组,然后JSON对该新数组进行编码。
试试这个:
$collection = array();
$data['events'] = $this->calendar_model->get_events();
foreach ($data['events'] as $arr) {
settype($arr,"array");
$arr['something'] = false;
array_push($collection, $arr);
}
echo json_encode($collection);
答案 2 :(得分:0)
$data['events'] = $this->calendar_model->get_events();
foreach ($data['events'] as &$arr) {
settype($arr,"array");//This if there is not array
$arr['something'] = false;
}
echo json_encode($data['events']);
答案 3 :(得分:-1)
尝试制作自己喜欢的json
$strJson = '';
$data['events'] = $this->calendar_model->get_events();
foreach ($data['events'] as $arr) {
settype($arr,"array");
$arr['something'] = false;
//Assign value as yours in blow code
$strJson .= '{"title" : "'.$arr.'","start" : "'.$arr.'","end" : "'.$arr.'"},';
}
$strJson1=rtrim($strJson, ",");
$newStr = '['.$strJson1.']';
echo $newStr;