PHP在数组中循环并附加到对象
我有一系列这样的物体PHP在数组中循环并附加到对象,php,arrays,Php,Arrays,我有一系列这样的物体 Array ( [0] => stdClass Object ( [Job] => stdClass Object ( [ID] => 123 [Name] => Foo ) ) [1] => stdClass Object
Array
(
[0] => stdClass Object
(
[Job] => stdClass Object
(
[ID] => 123
[Name] => Foo
)
)
[1] => stdClass Object
(
[Job] => stdClass Object
(
[ID] => 456
[Name] => BAR
)
)
)
我需要循环遍历数组,并向对象添加一些附加信息,如“Status”,但我遇到了一些问题
foreach($arrJobs as $key => $val) {
$arrJobs[$key]->Job->Status = new StdClass;
$arrJobs[$key]->Job->Status = $myStatus;
}
这似乎有效,但我得到以下警告
警告:正在从中的空值创建默认对象
是的,首先创建一个对象。不能分配
null
的属性。这就是为什么需要php的泛型空类stdClass
的实例
$arrJobs[$key] = new stdClass;
$arrJobs[$key]->foo = 1;
// And/or see below for 'nested' ...
$arrJobs[$key]->bar = new stdClass;
$arrJobs[$key]->bar->foo = 1;
for($i=0;$iJob->Status=新stdClass;
//其他业务
}
根据我对您的理解,您只需要将属性附加到现有对象不要在循环中创建新对象
你只需要这个
foreach ($arrJobs as $obj)
{
$obj->job->status = $myStatus;
}
请参阅完整代码:
<?php
$obj1 = new \stdClass();
$obj1->job = new \stdClass();
$obj1->job->id = 123;
$obj1->job->name = "foo";
$obj2 = new \stdClass();
$obj2->job = new \stdClass();
$obj2->job->id = 456;
$obj2->job->name = "bar";
$array = [$obj1,$obj2];
var_dump($array);
foreach ($array as $obj)
{
$obj->job->status = "the status";
//add any properties as you like dynamicly here
}
echo "<br>\nafter<br>\n";
var_dump($array);
exit;
试试这个
PHP
<?php
// Sample object creation.
$array = [];
$array = [0 => (object) ['Job'=>(object) ['ID'=>123, 'Name' => 'Foo']]];
foreach($array as $val) {
$val->Job->Status = (object) ['zero' => 0,'one' => 1]; // Status 0 and 1.
}
echo "<pre>";
print_r($array);
?>
没有发出警告。你能把你的例子更新成一个真实再现问题的例子吗?非常感谢,我相信这是对我的问题最清晰、清楚和全面的回答。
<?php
// Sample object creation.
$array = [];
$array = [0 => (object) ['Job'=>(object) ['ID'=>123, 'Name' => 'Foo']]];
foreach($array as $val) {
$val->Job->Status = (object) ['zero' => 0,'one' => 1]; // Status 0 and 1.
}
echo "<pre>";
print_r($array);
?>
Array
(
[0] => stdClass Object
(
[Job] => stdClass Object
(
[ID] => 123
[Name] => Foo
[Status] => stdClass Object
(
[zero] => 0
[one] => 1
)
)
)
)