Initialize Objects like arrays in PHP? Initialize Objects like arrays in PHP? php php

Initialize Objects like arrays in PHP?


You can use type casting:

$object = (object) array("name" => "member 1", array("name" => "member 1.1") );


I also up-voted Gumbo as the preferred solution but what he suggested is not exactly what was asked, which may lead to some confusion as to why member1o looks more like a member1a.

To ensure this is clear now, the two ways (now 3 ways since 5.4) to produce the same stdClass in php.

  1. As per the question's long or manual approach:

    $object = new stdClass;$object->member1 = "hello, I'm 1";$object->member1o = new stdClass;$object->member1o->member1 = "hello, I'm 1o.1";$object->member2 = "hello, I'm 2";
  2. The shorter or single line version (expanded here for clarity) to cast an object from an array, ala Gumbo's suggestion.

    $object = (object)array(     'member1' => "hello, I'm 1",     'member1o' => (object)array(         'member1' => "hello, I'm 1o.1",     ),     'member2' => "hello, I'm 2",);
  3. PHP 5.4+ Shortened array declaration style

    $object = (object)[     'member1' => "hello, I'm 1",     'member1o' => (object)['member1' => "hello, I'm 1o.1"],     'member2' => "hello, I'm 2",];

Will both produce exactly the same result:

stdClass Object(    [member1] => hello, I'm 1    [member1o] => stdClass Object        (            [member1] => hello, I'm 1o.1        )    [member2] => hello, I'm 2)

nJoy!


From a (now dead) post showing both type casting and using a recursive function to convert single and multi-dimensional arrays to a standard object:

<?phpfunction arrayToObject($array) {    if (!is_array($array)) {        return $array;    }    $object = new stdClass();    if (is_array($array) && count($array) > 0) {        foreach ($array as $name=>$value) {            $name = strtolower(trim($name));            if (!empty($name)) {                $object->$name = arrayToObject($value);            }        }        return $object;    }    else {        return FALSE;    }}

Essentially you construct a function that accepts an $array and iterates over all its keys and values. It assigns the values to class properties using the keys.

If a value is an array, you call the function again (recursively), and assign its output as the value.

The example function above does exactly that; however, the logic is probably ordered a bit differently than you'd naturally think about the process.