Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在php中向数组中的每个对象添加新的键值对?_Php_Arrays_Foreach - Fatal编程技术网

如何在php中向数组中的每个对象添加新的键值对?

如何在php中向数组中的每个对象添加新的键值对?,php,arrays,foreach,Php,Arrays,Foreach,我的代码: 情景1 $newarray = array(); foreach($rows as $k => $v) { $newarray[$k] = $v; $newarray['newitem'] = 'Add this to existing object'; } echo json_encode($newarray); 我也试过这个: 情景2 $newarray = array(); foreach($row

我的代码: 情景1

$newarray = array();

foreach($rows as $k => $v) 
    {
           $newarray[$k] = $v;
           $newarray['newitem'] = 'Add this to existing object';   
    }
echo json_encode($newarray);
我也试过这个: 情景2

$newarray = array();

foreach($rows as $k => $v) 
    {
           $newarray[$k] = $v;
           $newarray[$k]['newitem'] = 'Add this to existing object';   
    }
echo json_encode($newarray);
在场景1中,仅为后第一个对象添加键值对。它不会循环通过。 在场景2中,我得到HTTP错误500

我做错了什么

更新:

现有产出:

[{"pid":"123","date":"2016-08-23 08:08:40","post_title":"AHHH"},{"pid":"223","date":"2016-08-23 08:08:40","post_title":"wwwwAHHH"},{"pid":"223","date":"2016-08-23 08:08:40","post_title":"xxxAHHH"}]
所需输出:

[{"pid":"123","date":"2016-08-23 08:08:40","post_title":"AHHH","newkey":"new value1"},{"pid":"223","date":"2016-08-23 08:08:40","post_title":"wwwwAHHH","newkey":"new value2"},{"pid":"223","date":"2016-08-23 08:08:40","post_title":"xxxAHHH","newkey":"new value3"}]

您可以创建一个包含所需内容的临时数组,然后将其添加到newarray,因此创建一个临时数组,添加新数据和现有数据,然后将其添加到newarray

$newarray = array();
foreach($rows as $k => $v) 
{
    $t = $v;
    $t['newitem'] = 'Add this to existing object';
    $newarray[$k] = $t;
}
echo json_encode($newarray);
编辑:

现在我知道,
$rows
中的内容是一个JSON字符串,这是您想要的方式。不能在JSON字符串上进行foreach,必须首先将其转换为PHP数据结构,然后在其上进行foreach添加新数据,然后将其转换回JSON字符串

$rows = '[{"pid":"123","date":"2016-08-23 08:08:40","post_title":"AHHH"},{"pid":"223","date":"2016-08-‌​23 08:08:40","post_title":"wwwwAHHH"},{"pid":"223","date":"2016‌​-08-23 08:08:40","post_title":"xxxAHHH"}]';

$objArray = json_decode($rows);

$newarray = array();
foreach($objArray as $v) 
{

    $v->newitem = 'Add this to existing object';
    $newarray[] = $v;
}
print_r($newarray);
echo json_encode($newarray);
$newArray
现在

Array
(
    [0] => stdClass Object
        (
            [pid] => 123
            [date] => 2016-08-23 08:08:40
            [post_title] => AHHH
            [newitem] => Add this to existing object
        )

    [1] => stdClass Object
        (
            [pid] => 223
            [date] => 2016-08-‌​23 08:08:40
            [post_title] => wwwwAHHH
            [newitem] => Add this to existing object
        )

    [2] => stdClass Object
        (
            [pid] => 223
            [date] => 2016‌​-08-23 08:08:40
            [post_title] => xxxAHHH
            [newitem] => Add this to existing object
        )

)
新的JSON字符串将是

[  {"pid":"123",
    "date":"2016-08-23 08:08:40",
    "post_title":"AHHH",
    "newitem":"Add this to existing object"
   },
   {"pid":"223",
    "date":"2016-08-\u200c\u200b23 08:08:40",
    "post_title":"wwwwAHHH",
    "newitem":"Add this to existing object"
   },
   {"pid":"223",
    "date":"2016\u200c\u200b-08-23 08:08:40",
    "post_title":"xxxAHHH",
    "newitem":"Add this to existing object"
   }
]

在场景1中,每次为同一数组键分配不同的值$v,因此它只是被重写(最终将成为传递给foreach的最后一行的值):

场景2是正确的,但需要稍微改变。在场景2中,您正在添加一个包含$v的数组,但随后会立即覆盖它:

$newarray[$k] = $v;
$newarray[$k]['newitem'] = 'Add this to existing object';
您需要为项目提供单独的键,因此解决方案可以是使用“olditem”键将初始值分配给:

$newarray[$k]['olditem'] = $v;
$newarray[$k]['newitem'] = 'Add this to existing object';

根据您希望数组的构造方式,您可以使用多种解决方案,但关键原则是确保值具有单独的键,这样它们就不会相互覆盖。

第一种方案是错误的。第二种方法应该有效。
$v
是数组吗?您的错误可能是由代码后面的某个地方引起的。您能否提供输入和所需输出的示例?请显示
$rows
包含的内容。另外,显示
$newarray
的预期结果尝试此操作后,我得到HTTP错误500rows然后$rows=[{“pid”:“123”,“date”:“2016-08-23 08:08:40”,“post_title”:“AHHH”},{“pid”:“223”,“date”:“2016-08-23 08:08:40”,“post_title”:“wwwwwwahh”},{“pid”:“223”,“date”:“2016-08-23 08:08:40”,“post_title”:“xxxahh”}参见我的编辑,现在我们知道您正在处理一个JSON字符串,但输出如下:[{“oldItem”:{“pid”:“123”,“date”:“2016-08-23 08:08:40”,“post_title”:“AHHH”,“newkey”:“newvalue1”},“newItem”:“Value 1”},{“oldItem”:“pid”:“123”,“date”:“2016-08-23 08:08:40”,“post_title”:“AHHH”,“newkey”:“newvalue1”},“newItem”:“Value 2”{“oldItem”:“pid”:“123”、“日期”:“2016-08-23 08:08:40”、“帖子标题”:“AHHH”、“newkey”:“new value1”},“newItem”:“Value 3”}]您能显示收到的HTTP 500错误的内容吗?
$newarray[$k]['olditem'] = $v;
$newarray[$k]['newitem'] = 'Add this to existing object';