将新键附加到对象中的现有数组

时间:2016-11-30 20:29:10

标签: php arrays json

我有一个现有的JSON数组:

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

如何合并上面的名称和值键,而不是分开?

3 个答案:

答案 0 :(得分: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
                )
        )

答案 1 :(得分:0)

直接更新$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是一个对象。

答案 2 :(得分:0)

如果要修改现有对象,可以直接设置value属性。

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

如果要在不修改原始对象或保留对其内部对象的引用的情况下创建结果,可以克隆每个内部对象并将新属性添加到克隆对象。

cs.nextLine()