how to convert multidimensional array to object in php?

前端 未结 2 1458
我在风中等你
我在风中等你 2020-12-14 09:04

i have a multidimensional array:

$image_path = array(\'sm\'=>$sm,\'lg\'=>$lg,\'secondary\'=>$sec_image);

witch looks like this:

2条回答
  •  谎友^
    谎友^ (楼主)
    2020-12-14 09:56

    The best way would be to manage your data structure as an object from the start if you have the ability:

    $a = (object) array( ... ); $a->prop = $value; //and so on
    

    But the quickest way would be the approach supplied by @CharlieS, using json_decode(json_encode($a)).

    You could also run the array through a recursive function to accomplish the same. I have not benchmarked this against the json approach but:

    function convert_array_to_obj_recursive($a) {
        if (is_array($a) ) {
            foreach($a as $k => $v) {
                if (is_integer($k)) {
                    // only need this if you want to keep the array indexes separate
                    // from the object notation: eg. $o->{1}
                    $a['index'][$k] = convert_array_to_obj_recursive($v);
                }
                else {
                    $a[$k] = convert_array_to_obj_recursive($v);
                }
            }
    
            return (object) $a;
        }
    
        // else maintain the type of $a
        return $a; 
    }
    

    Hope that helps.

    EDIT: json_encode + json_decode will create an object as desired. But, if the array was numerical or mixed indexes (eg. array('a', 'b', 'foo'=>'bar') ), you will not be able to reference the numerical indexes with object notation (eg. $o->1 or $o[1]). the above function places all the numerical indexes into the 'index' property, which is itself a numerical array. so, you would then be able to do $o->index[1]. This keeps the distinction of a converted array from a created object and leaves the option to merge objects that may have numerical properties.

提交回复
热议问题