Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.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 - Fatal编程技术网

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
                        )

                )

        )

)