代码之家  ›  专栏  ›  技术社区  ›  DisgruntledGoat

向对象添加数组会破坏数组

  •  1
  • DisgruntledGoat  · 技术社区  · 15 年前

    我有一个这样的数组(输出来自 print_r ):

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

    我正在运行一个自定义函数来将其转换为对象。只应转换顶层,子数组应保持为数组。输出结果如下:

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

    这是我的转换函数。它所做的只是将每个数组成员的值设置为一个对象:

    function array_to_object( $arr )
    {
        $obj = new stdClass;
        if ( count($arr) == 0 )
            return $obj;
    
        foreach ( $arr as $k=>$v )
            $obj->$k = $v;
    
        return $obj;
    }
    

    我一辈子都搞不清楚!

    2 回复  |  直到 15 年前
        1
  •  3
  •   Artefacto    15 年前

    我无法复制(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));
    

    给予

    stdClass Object
    (
        [price] => 700
        [room_price] => Array
            (
                [0] =>
                [1] =>
                [2] =>
                [3] =>
                [4] =>
            )
    
        [bills] => Array
            (
                [0] => Gas
            )
    
    )
    
        2
  •  4
  •   ax. Clement Herreman    15 年前

    你为什么不 cast the array to an object ?

    $myObj = (object) $myArray;