将元素添加到数组然后将其编码为json

时间:2014-02-01 16:29:01

标签: php arrays json

我有这段代码

$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仅打印最后一个。

4 个答案:

答案 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;