PHP loop through array and append to object

I have an array of objects like this:

Array
(
    [0] => stdClass Object
        (
            [Job] => stdClass Object
                (
                    [ID] => 123
                    [Name] => Foo
                 )
        )
    [1] => stdClass Object
        (
            [Job] => stdClass Object
                (
                    [ID] => 456
                    [Name] => BAR
                 )
        )
)

      

I need to go through an array and add more information to a Status object, but I'm having some problems.

foreach($arrJobs as $key => $val) {

  $arrJobs[$key]->Job->Status = new StdClass;
  $arrJobs[$key]->Job->Status = $myStatus;

}

      

This works, but I get the following warning:

Warning: creating default object from empty value to ...

+3


source to share


4 answers


In my opinion, you just need to add properties to existing objects. Don't create new objects in your loop

you just need this

foreach ($arrJobs as $obj)
{
    $obj->job->status = $myStatus;
}

      



See full code:

<?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;

      

Now $obj1

and $obj2

has a new property 'status', see this demo: ( https://eval.in/833410 )

+1


source


Yes, create an object first. You cannot assign properties null

. For this you need an instance stdClass

, php generic empty class.



$arrJobs[$key] = new stdClass;
$arrJobs[$key]->foo = 1;

// And/or see below for 'nested' ...
$arrJobs[$key]->bar = new stdClass;
$arrJobs[$key]->bar->foo = 1;

      

+2


source


for ($i = 0; $i < count($arrJobs); $i++)
{
    $arrJobs[$i]->Job->Status = new stdClass;
    // other operations
}

      

0


source


Try it,

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

      

Output

Array
(
    [0] => stdClass Object
        (
            [Job] => stdClass Object
                (
                    [ID] => 123
                    [Name] => Foo
                    [Status] => stdClass Object
                        (
                            [zero] => 0
                            [one] => 1
                        )

                )

        )

)

      

0


source







All Articles