Dev
Dev

Reputation: 6720

PHP json_encode() specific key of an array

I am using PHP 5.5.12.

I have an array like:

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
                        )
                )
        )
)

I want to json_encode() the field time of each root level.

I tried using:

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

and:

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

But using print_r($user_medicine_value), it returns the same array.

I want the result to be as follows:

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"}]"

        )

)

How can I achieve this result?

Upvotes: 0

Views: 1561

Answers (4)

viral
viral

Reputation: 3743

Because, in every iteration, the value is not being saved anywhere,

You have two options here, either make new array having time key with json_encode() or pass the value by reference as shown below.

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

Upvotes: 0

Disha V.
Disha V.

Reputation: 1864

I have read your question earlier and prepared the answer but you removed it before i paste the answer. Anyways here is the solution

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

Upvotes: 1

Nicolas D
Nicolas D

Reputation: 1222

Maybe the json encode fails because your time array contains an stdClass Object. Try to convert this like that :

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

Upvotes: 0

Marius
Marius

Reputation: 4016

You can replace your foreach loop's content with something like this:

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);
}

Upvotes: 0

Related Questions