2016-11-30 3 views
1

Я существующий массив JSON:Append новый ключ к существующему массиву в объекте

stdClass Object 
(
    [set] => Array 
     (
      [0] => stdClass Object 
       (
        [name] => agenda 
       ) 

      [1] => stdClass Object 
       (
        [name] => first aid 
       ) 
     ) 

) 

мне нужно добавить новый ключ к нему, поэтому окончательный JSON результат что-то вроде этого:

set: [{ 
    name: 'agenda', 
    value: 'Agenda' 
}, { 
    code: 'first aid', 
    value: 'First Aid' 
}], 

Это то, что я сделал до сих пор:

$result = array(); 
foreach ($data->set as $k => $row) { 
    $result['name'][$k] = $row->name; 
    $result['value'][$k] = ucwords($row->name); 
} 

Но я закончил с:

Array 
(
    [name] => Array 
     (
      [0] => agenda 
      [1] => aid kit 

     ) 
    [value] => Array 
     (
      [0] => Agenda 
      [0] => First Aid 
     ) 
) 

Как я могу объединить вышеуказанное, так что ключи имени и значения находятся в паре, а не отдельно?

+0

Что именно вы хотите, чтобы последний массив выглядел? –

+0

См. Итоговый результат выше. – Alko

+0

'$ result = array_map (function ($ setPart) {return array ('name' => $ setPart-> name, 'value' => ucwords ($ setPart-> name));}, $ object-> set) ; ' – Wizard

ответ

0

Update $row непосредственно изменить существующую $data:

foreach ($data->set as $row) { 
    $row->value = ucwords($row->name); 
} 

Чтобы сделать это так, как вы пытаетесь:

$result = $data; 
foreach ($data->set as $k => $row) { 
    $result->set[$k]->value = ucwords($row->name); 
} 

Уведомление: $row является объектом.

+0

Поскольку '$ row' - это объект, вам фактически не нужно использовать ссылку. (Он по-прежнему работает в любом случае, просто не нужно.) –

+0

@ Don'tPanic: Приятно знать. Я только делаю это с помощью массивов. – AbraCadaver

+0

@AbraCadaver Ваш пример работает. Бит короче, но такой же желаемый результат. Поскольку я предпочитаю меньше кода, я приму свой ответ. – Alko

0

Ваша попытка это

$result = array(); 
$count = 0; 
foreach ($data->set as $k => $row) { 
    $result[$count]['name'] = $row->name; 
    $result[$count]['value'] = ucwords($row->name); 
    $count++; 
} 

результат этого

Array 
     (
      [0] => stdClass Object 
       (
        [name] => agenda 
        [value] => Agenda 
       ) 

      [1] => stdClass Object 
       (
        [name] => first aid 
        [value] => First Aid 
       ) 
     ) 
+0

Вы даже проверили это? –

+0

Да, я попробовал это, но желаемый результат не тот. – Alko

+0

моя ошибка, я редактирую и тестирую результат this => Array ([0] => Array ([name] => Agenda [value] => Agenda) [1] => Array ([name] => первая помощь [значение ] => Первая помощь)) –

0

Если вы хотите изменить существующий объект, вы можете просто установить свойство value напрямую.

foreach ($data->set as $row) { 
    $row->value = ucwords($row->name); 
} 

Если вы хотите, чтобы создать результат, не изменяя исходный объект или оставить ссылки на его внутренние объекты, можно клонировать каждого из внутренних объектов и добавить новые свойства клонированных объектов.

$result = array(); 
foreach ($data->set as $k => $row) { 
    $obj = clone $row; 
    $obj->value = ucwords($row->name); 
    $result[$k] = $obj; 
} 
+0

Thats the one, большое спасибо. – Alko

Смежные вопросы