PHP json_encode()数组的特定键

时间:2015-07-20 12:43:20

标签: php json

我正在使用PHP 5.5.12

我有一个像:

这样的数组
Array
(
    [0] => Array
        (
            [user_id] => 3
            [medicine_id] => 1
            [time] => Array
                (
                    [0] => stdClass Object
                        (
                            [event_type] => before_breakfast
                            [time] => 07:00:00
                        )

                    [1] => stdClass Object
                        (
                            [event_type] => after_breakfast
                            [time] => 07:30:00
                        )

                )

        )

    [1] => Array
        (
            [user_id] => 3
            [medicine_id] => 2
            [time] => Array
                (
                    [0] => stdClass Object
                        (
                            [event_type] => before_lunch
                            [time] => 13:00:00
                        )

                    [1] => stdClass Object
                        (
                            [event_type] => after_lunch
                            [time] => 14:00:00
                        )

                )

        )

    [2] => Array
        (
            [user_id] => 3
            [medicine_id] => 3
            [time] => Array
                (
                    [0] => stdClass Object
                        (
                            [event_type] => before_dinner
                            [time] => 20:00:00
                        )

                    [1] => stdClass Object
                        (
                            [event_type] => after_lunch
                            [time] => 21:00:00
                        )
                )
        )
)

我希望json_encode()每个根级别的字段time

我尝试使用:

foreach ($user_medicine_times as $user_medicine_key => $user_medicine_value) {
    $user_medicine_value['time'] = json_encode($user_medicine_value['time'], true);
}

foreach ($user_medicine_times as $user_medicine_key => &$user_medicine_value) {
    $user_medicine_value['time'] = json_encode($user_medicine_value['time'], true);
}

但是使用print_r($user_medicine_value),它会返回相同的数组。

我希望结果如下:

Array
(
    [0] => Array
        (
            [user_id] => 3
            [medicine_id] => 1
            [time] => "[{"event_type":"before_breakfast","time":"07:00:00"},{"event_type":"after_breakfast","time":"07:30:00"}]"

        )

    [1] => Array
        (
            [user_id] => 3
            [medicine_id] => 2
            [time] => "[{"event_type":"before_lunch","time":"13:00:00"},{"event_type":"after_lunch","time":"17:00:00"}]"

        )

    [2] => Array
        (
            [user_id] => 3
            [medicine_id] => 3
            [time] => "[{"event_type":"before_dinner","time":"20:00:00"},{"event_type":"after_lunch","time":"17:00:00"}]"

        )

)

如何实现这一结果?

4 个答案:

答案 0 :(得分:1)

我之前已经阅读了您的问题并准备了答案,但是在我粘贴答案之前您将其删除了。无论如何这里是解决方案

function outer(&$val, $key) {
    $val['time'] = json_encode($val['time']);
}
array_walk($your_array, 'outer');
print_r($your_array);

答案 1 :(得分:0)

因为,在每次迭代中,值都没有保存在任何地方,

您可以在此处选择两个选项:使用time创建具有json_encode()键的新数组,或者通过引用传递值,如下所示。

foreach ($user_medicine_times as $user_medicine_key => &$user_medicine_value) {
                                                       ^
    $user_medicine_value['time'] = json_encode($user_medicine_value['time'], true);
}

答案 2 :(得分:0)

您可以使用以下内容替换您的foreach循环内容:

foreach ($user_medicine_times as $user_medicine_key => $user_medicine_value) {
    $user_medicine_times[$user_medicine_key]['time'] = json_encode($user_medicine_value['time'], true);
}

答案 3 :(得分:0)

也许json编码失败,因为你的时间数组包含一个stdClass对象。尝试将其转换为:

$result = array();
foreach ($user_medicine_value['time'] as $value) {
    $result['event_type'] = $value->event_type;
    $result['time'] = $value->time;
}
$user_medicine_value['time'] = $result;