PHP:如何将一个数组转换为StdClass对象?

5
有没有PHP函数可以自动执行这个操作?
if (is_array($array)) {
    $obj = new StdClass();
    foreach ($array as $key => $val){
        $obj->$key = $val;
    }
    $array = $obj;
}
3个回答

10
为什么不直接进行强制类型转换呢?
$myObj = (object) array("name" => "Jonathan");
print $myObj->name; // Jonathan
如果它是多维的,Richard Castera在他的博客中提供了以下解决方案: 链接
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;
    }
}

最好的答案通常是最简单的 +1 - alex

3
如果是一维数组,可以使用强制类型转换:
$obj = (object)$array;

0

这对我来说可行

if (is_array($array)) {
$obj = new StdClass();
foreach ($array as $key => $val){

    $key = str_replace("-","_",$key) 

    $obj->$key = $val;
}
$array = $obj;
}

请确保在 PHP 中使用 str_replace,因为“-”不允许出现在变量名中,以及:

变量命名规则

* A variable name must start with a letter or an underscore "_"
* A variable name can only contain alpha-numeric characters and underscores (a-z, A-Z, 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)

因此,由于这些在数组中是允许的,如果其中任何一个出现在您要转换的数组的$key中,您将会遇到严重的错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接