Есть ли функция PHP, которая будет делать это автоматически?
if (is_array($array)) { $obj = new StdClass(); foreach ($array as $key => $val){ $obj->$key = $val; } $array = $obj; }
Почему бы просто не бросить его?
$myObj = (object) array("name" => "Jonathan"); print $myObj->name; // Jonathan
Если он многомерный, Ричард Кастера предлагает следующее решение в своем блоге :
function 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; } }
Если это одномерный массив, бросок должен работать:
$obj = (object)$array;
Это работает для меня
if (is_array($array)) { $obj = new StdClass(); foreach ($array as $key => $val){ $key = str_replace("-","_",$key) $obj->$key = $val; } $array = $obj; }
убедитесь, что str_replace существует как '-' не допускается в именах переменных в php, а также:
Правила именования переменных
* A variable name must start with a letter or an underscore "_" * A variable name can only contain alpha-numeric characters and underscores (az, AZ, 0-9, and _ ) * A variable name should not contain spaces. If a variable name is more than one word, it should be separated with an underscore ($my_string), or with capitalization ($myString)
Итак, поскольку они разрешены в массивах, если какой-либо из них входит в ключ $ из массива, который вы конвертируете, у вас будут неприятные ошибки.