tags:

views:

38

answers:

2

I have an array like this (output from print_r):

Array
(
    [price] => 700.00
    [room_prices] => Array
        (
            [0] => 
            [1] => 
            [2] => 
            [3] => 
            [4] => 
        )

    [bills] => Array
        (
            [0] => Gas
        )
)

I'm running a custom function to convert it to an object. Only the top-level should be converted, the sub-arrays should stay as arrays. The output comes out like this:

stdClass Object
(
    [price] => 700.00
    [room_prices] => Array
        (
            [0] => Array
        )

    [bills] => Array
        (
            [0] => Array
        )
)

Here is my conversion function. All it does is set the value of each array member to an object:

function array_to_object( $arr )
{
    $obj = new stdClass;
    if ( count($arr) == 0 )
        return $obj;

    foreach ( $arr as $k=>$v )
        $obj->$k = $v;

    return $obj;
}

I can't figure this out for the life of me!

+2  A: 

I can't reproduce (PHP 5.3):

$a = array(
    "price" =>  700.00,
    "room_price" => array(NULL, NULL, NULL, NULL, NULL),
    bills => array("Gas"),
);

function array_to_object( $arr )
{
    $obj = new stdClass;
    if ( count($arr) == 0 )
        return $obj;

    foreach ( $arr as $k=>$v )
        $obj->$k = $v;

    return $obj;
}

print_r(array_to_object($a));

gives

stdClass Object
(
    [price] => 700
    [room_price] => Array
        (
            [0] =>
            [1] =>
            [2] =>
            [3] =>
            [4] =>
        )

    [bills] => Array
        (
            [0] => Gas
        )

)
Artefacto
Thanks for the response. I checked the output right after the function and realised the function is working correctly! There was another part of my code modifying the output afterwards. One of those faceslap moments.
DisgruntledGoat
+4  A: 

why don't you just cast the array to an object?

$myObj = (object) $myArray;
ax
Interesting, didn't realise that would work.
DisgruntledGoat