2015-07-20 2 views
0

Я использую PHP 5.5.12.PHP json_encode() конкретный ключ массива

У меня есть массив, как:

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

     ) 

) 

Как я могу добиться этого результата?

+1

Вы задали аналогичный вопрос сегодня и, по-видимому, исключили этот вопрос, почему?! У нас есть щедрость, если вы думаете, что ваш вопрос не получил достаточного внимания. – Daan

+1

Лучше сделать новый массив, состоящий только из значений '[time]', а затем использовать 'json_encode' –

+0

Вопрос, который я удалил, был связан с чем-то, связанным с фильтром массива и заменой определенного значения ключа, я его достиг. Это касается преобразования определенного значения ключа в JSON. Баунти имеют право после 2 дней. Я не могу так долго ждать, если работаю в крайнем сроке. Кроме того, без предоставления существующего решения, голосующий голос - высокомерие, я думаю, что я его удалил. – Dev

ответ

1

Я прочитал ваш вопрос раньше и подготовил ответ, но вы удалили его, прежде чем я вставить ответ. В любом случае это решение

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

Это сработало ..! Большое спасибо. :) – Dev

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

Из-за & $ user_medicine_value он дает ошибку: недопустимый аргумент, предоставленный foreach(). И использование true в json_encode также не влияет на предоставленный массив. Он возвращает тот же массив, который я использовал в качестве ввода. – Dev

+0

больше кода. @Dev – Viral

0

Вы можете заменить содержимое вашего цикл по каждому элементу с чем-то вроде этого:

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

Прошу прощения, это не работает. – Dev

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; 
Смежные вопросы