【问题标题】:How to convert an array to object in PHP?如何在 PHP 中将数组转换为对象?
【发布时间】:2010-12-24 13:19:32
【问题描述】:

如何将这样的数组转换为对象?

[128] => Array
    (
        [status] => "Figure A.
 Facebook's horizontal scrollbars showing up on a 1024x768 screen resolution."
    )

[129] => Array
    (
        [status] => "The other day at work, I had some spare time"
    )

【问题讨论】:

  • 你想得到什么样的对象,准确地说?我的意思是:属性应该是什么?
  • 在一个循环中应该都是因为状态是一个数据数组所以都是 printet
  • 不确定从什么时候开始,但这只是有效:$a = (object)['hello' => 'world'];

标签: php arrays object casting


【解决方案1】:

在最简单的情况下,将数组“转换”为对象可能就足够了:

$object = (object) $array;

另一种选择是将标准类实例化为变量,并在重新分配值时循环遍历数组:

$object = new stdClass();
foreach ($array as $key => $value)
{
    $object->$key = $value;
}

正如Edson Medina 指出的那样,一个真正干净的解决方案是使用内置的json_ 函数:

$object = json_decode(json_encode($array), FALSE);

这也(递归地)将您的所有子数组转换为您可能想要也可能不想要的对象。不幸的是,它比循环方法具有 2-3x performance hit

警告!(感谢 Ultra 的评论):

json_decode 在不同的环境下以不同的方式转换 UTF-8 数据。我最终在本地获得了“240.00”的价值,在生产上获得了“240”的价值——巨大的灾难。 Morover 如果转换失败,则字符串获取返回为 NULL

【讨论】:

  • “因为变量不能以数字开头”,是的,它们可以:$object->{3} = 'xyz';
  • "has a 2-3x performance hit" 这是一个不公平的比较,因为后一种方法返回递归对象,而没有进一步条件的循环方法(如@streetparade 的答案)只转换第一级。
  • @feeela 我认为这根本不公平......我确实提到它递归地进行转换。此外,使用平面输入数组(不使用任何递归)实现了 2-3 倍的性能提升
  • 警告!不同环境下的 json_decode 以不同的方式转换 UTF-8 数据。我最终在本地获得了“240.00”的价值,在生产上获得了“240”的价值——巨大的灾难。 Morover 如果转换失败,则字符串获取返回为 NULL
  • 使用 json_* 函数时请注意:在这种情况下,存储在原始数组中的引用(例如对其他数组)将被复制。假设数组中的键 x 持有对另一个数组的引用。然后$object->x 在执行你的单行代码后将是$array['x'] 的副本,不再是对原始数组的引用。这在某些应用程序中可能是无害的,但对于大型数组,它会浪费内存并且如果稍后使用该引用可能会导致执行混乱。
【解决方案2】:

您可以简单地使用类型转换将数组转换为对象。

// *convert array to object* Array([id]=> 321313[username]=>shahbaz)
$object = (object) $array_name;

//now it is converted to object and you can access it.
echo $object->username;

【讨论】:

    【解决方案3】:

    简单的方法是

    $object = (object)$array;
    

    但这不是你想要的。如果您想要实现某些目标的对象,但这在这个问题中是缺失的。仅仅为了使用对象而使用对象是没有意义的。

    【讨论】:

    • 不起作用,我在问问题之前就这样做了,所以必须有另一种方法来做到这一点
    • 他为什么要给出他想要使用对象的理由?我认为这与 如何 完成无关。也许他需要对它们进行 json_encode 或序列化?这样做可能有很多理由。
    • hmm.. 我查看了浏览器输出它看起来像这个对象(stdClass)#150(130){ [0]=> array(1) { ["status"]=> string( 130)“终于,Mac 和 Linux 用户不必觉得自己是 Chrome 领域的二等公民:他们有官方的 beta 版本……”} 官方这是一个对象,但如何迭代抛出这个我可以访问状态像 $obj->status 有什么想法吗?
    • zombat,JSON 编码没有理由使用对象,json_encode() 有一个标志来使用对象。使用序列化需要接收者期望的特定对象类型。一般来说,我会尝试帮助解决 actual 问题。对我来说,这个问题意味着其他地方存在架构错误。
    【解决方案4】:

    快速破解:

    // assuming $var is a multidimensional array
    $obj = json_decode (json_encode ($var), FALSE);
    

    不漂亮,但有效。

    【讨论】:

    • 我真的很喜欢这个解决方案,使用内置函数而不是用户定义总是更快,而且这个很好用。感谢您的提示。
    • @Oddant,为了公平起见 @EdsonMedina,最初的问题没有指定属性需要什么可见性,并且由于 OP 在后面的 cmets 中不使用 $this 作为访问器,因此它非常重要暗示他/她想要一个 stdClass 实例作为输出,而不是你的答案使用的用户定义的类。我同意这个解决方案的优雅,但不幸的是,它是一种非常常用的模式来解决嵌套数组的这个问题,其中强制转换为对象不起作用。也有可能 OP 正在使用需要和对象作为输入而不是数组的接口。
    • 别忘了使用这种方式你会丢失除基本类型之外的所有类型。例如,DateTime 将是转换器 stdObject。
    • 刚刚注意到,这不适用于像这样的简单数组: json_decode(json_encode(['test']),false);这给出了与用于输入的数组相同的数组
    • @JohnDoe 问题是指关联数组,而不是简单数组。
    【解决方案5】:

    这里有三种方式:

    1. 伪造一个真实的对象:

      class convert
      {
          public $varible;
      
          public function __construct($array)
          {
              $this = $array;
          }
      
          public static function toObject($array)
          {
              $array = new convert($array);
              return $array;
          }
      }
      
    2. 通过将数组转换为对象来将数组转换为对象:

      $array = array(
          // ...
      );
      $object = (object) $array;
      
    3. 手动将数组转换为对象:

      $object = object;
      foreach ($arr as $key => $value) {
          $object->{$key} = $value;
      }
      

    【讨论】:

    • 嗯,谢谢,但您的面部类给出以下错误致命错误:无法在第 10 行的 /var/www/bot/inc/twitter-bot.php 中重新分配 $this
    • 和 typcasint @reference 不是一个好主意,即使它在这里不起作用是我意外的 T_OBJECT_CAST,期待 T_NEW 或 T_STRING 或 T_VARIABLE 或 '$'
    • $array =& (object) $array == 不错的 KISS 实现!
    • 为什么有人想使用不同于 2) 的方法?有什么缺点吗?
    • 将数组类型转换为对象不适用于嵌套数组
    【解决方案6】:

    它的方法很简单,这也会为递归数组创建一个对象:

    $object = json_decode(json_encode((object) $yourArray), FALSE);
    

    【讨论】:

    • false 传递给json_decode() 将返回一个关联数组。
    • @user3284463 将true 传递给json_decode 将返回一个关联数组,false 是默认值,并将返回一个StdClass 实例。
    【解决方案7】:

    根据您需要的位置以及访问对象的方式,有不同的方法可以做到这一点。

    例如:只是类型转换它

    $object =  (object) $yourArray;
    

    然而,最兼容的方法是使用一种实用方法(还不是 PHP 的一部分),它基于指定类型的字符串(或忽略它只是取消引用值)实现标准 PHP 转换:

    /**
     * dereference a value and optionally setting its type
     *
     * @param mixed $mixed
     * @param null  $type (optional)
     *
     * @return mixed $mixed set as $type
     */
    function rettype($mixed, $type = NULL) {
        $type === NULL || settype($mixed, $type);
        return $mixed;
    }
    

    您的案例中的用法示例(Online Demo):

    $yourArray = Array('status' => 'Figure A. ...');
    
    echo rettype($yourArray, 'object')->status; // prints "Figure A. ..."
    

    【讨论】:

      【解决方案8】:

      您可以使用 (object) 函数将数组转换为对象。

      $arr= [128=> ['status'=>
                       'Figure A. Facebook \'s horizontal scrollbars showing up on a 1024x768 screen resolution.'],
                        129=>['status'=>'The other day at work, I had some spare time']];
      
                  $ArrToObject=(object)$arr;
                  var_dump($ArrToObject);
      

      结果将是一个包含数组的对象:

      object(stdClass)#1048 (2) { [128]=> 数组(1) {

      [“状态”]=> string(87) "图 A. Facebook 的水平滚动条显示在 1024x768 的屏幕分辨率上。" }

      [129]=> 数组(1){ [“状态”]=> string(44) "前几天上班,有空" } }

      【讨论】:

      • 这里(对象)不是函数,你只是做了类型转换。
      • 严格来说这不是类型转换,因为您更改的是 values 类型,而不是 variables。见stackoverflow.com/a/1147377/6144626
      【解决方案9】:

      这个对我有用

        function array_to_obj($array, &$obj)
        {
          foreach ($array as $key => $value)
          {
            if (is_array($value))
            {
            $obj->$key = new stdClass();
            array_to_obj($value, $obj->$key);
            }
            else
            {
              $obj->$key = $value;
            }
          }
        return $obj;
        }
      
      function arrayToObject($array)
      {
       $object= new stdClass();
       return array_to_obj($array,$object);
      }
      

      用法:

      $myobject = arrayToObject($array);
      print_r($myobject);
      

      返回:

          [127] => stdClass Object
              (
                  [status] => Have you ever created a really great looking website design
              )
      
          [128] => stdClass Object
              (
                  [status] => Figure A.
       Facebook's horizontal scrollbars showing up on a 1024x768 screen resolution.
              )
      
          [129] => stdClass Object
              (
                  [status] => The other day at work, I had some spare time
              )
      

      你可以像往常一样循环它:

      foreach($myobject as $obj)
      {
        echo $obj->status;
      }
      

      【讨论】:

      • 但是这个比类型转换慢了大约 500%(经过测试):$obj = (object) $array;
      • @xZero 但$obj = (object) $array; 不适用于多维数组。
      【解决方案10】:

      据我所知,没有内置方法可以做到这一点,但它就像一个简单的循环一样简单:

          $obj= new stdClass();
      
          foreach ($array as $k=> $v) {
              $obj->{$k} = $v;
          }
      

      如果您需要它来递归地构建您的对象,您可以详细说明。

      【讨论】:

        【解决方案11】:

        我也有这个问题,但是我注意到 json_decode 将 JSON 数组转换为对象。

        所以,我通过使用返回 JSON 对象字符串的 json_encode($PHPArray) 来提出我的解决方案,然后我使用 Json_decode($string) 对该字符串进行解码,它会返回一个结构完美的对象。 速记

        $object = json_decode(json_encode($array));
        

        或者

        $jsonString = json_encode($array);
        $object = json_decode($jsonString);
        

        【讨论】:

        • 实际上是 JSON 对象
        【解决方案12】:

        实际上,如果您想将它与多维数组一起使用,您可能需要使用一些递归。

        static public function array_to_object(array $array)
        {
            foreach($array as $key => $value)
            {
                if(is_array($value))
                {
                    $array[$key] = self::array_to_object($value);
                }
            }
            return (object)$array;
        }
        

        【讨论】:

          【解决方案13】:

          我肯定会采用这样的干净方式:

          <?php
          
          class Person {
          
            private $name;
            private $age;
            private $sexe;
          
            function __construct ($payload)
            {
               if (is_array($payload))
                    $this->from_array($payload);
            }
          
          
            public function from_array($array)
            {
               foreach(get_object_vars($this) as $attrName => $attrValue)
                  $this->{$attrName} = $array[$attrName];
            }
          
            public function say_hi ()
            {
               print "hi my name is {$this->name}";
            }
          }
          
          print_r($_POST);
          $mike = new Person($_POST);
          $mike->say_hi();
          
          ?>
          

          如果您提交:

          你会得到这个:

          我发现比较 Objects 的上述答案更合乎逻辑,应该将它们用于它们的目的(封装的可爱小对象)。

          同时使用 get_object_vars 确保不会在被操作的对象中创建额外的属性(您不希望汽车有姓氏,也不希望人有 4 个轮子)。

          【讨论】:

          • 为什么不使用 $attr_value 而不是 $array[$attr_name];在你的公共函数中 from_array($array) 函数
          【解决方案14】:

          复杂但易于扩展的技术:

          假设你有一个数组

          $a = [
               'name' => 'ankit',
               'age' => '33',
               'dob' => '1984-04-12'
          ];
          

          假设您有一个 Person 类,它可能具有来自该数组的更多或更少的属性。例如

          class Person 
          {
              private $name;
              private $dob;
              private $age;
              private $company;
              private $city;
          }
          

          如果您仍想将数组更改为 person 对象。您可以使用 ArrayIterator 类。

          $arrayIterator = new \ArrayIterator($a); // Pass your array in the argument.
          

          现在你有了迭代器对象。

          创建一个扩展FilterIterator Class的类;您必须在其中定义抽象方法接受。以身作则

          class PersonIterator extends \FilterIterator
          {
              public function accept()
              {
                  return property_exists('Person', parent::current());
              }
          }
          

          只有当属性存在于类中时,上述实现才会绑定属性。

          在 PersonIterator 类中再添加一个方法

          public function getObject(Person $object)
          {
                  foreach ($this as $key => $value)
                  {
                      $object->{'set' . underscoreToCamelCase($key)}($value);
                  }
                  return $object;
          }
          

          确保你在你的类中定义了修改器。 现在您可以在要创建对象的地方调用这些函数了。

          $arrayiterator = new \ArrayIterator($a);
          $personIterator = new \PersonIterator($arrayiterator);
          
          $personIterator->getObject(); // this will return your Person Object. 
          

          【讨论】:

            【解决方案15】:

            您也可以使用 ArrayObject,例如:

            <?php
                $arr = array("test",
                             array("one"=>1,"two"=>2,"three"=>3), 
                             array("one"=>1,"two"=>2,"three"=>3)
                       );
                $o = new ArrayObject($arr);
                echo $o->offsetGet(2)["two"],"\n";
                foreach ($o as $key=>$val){
                    if (is_array($val)) {
                        foreach($val as $k => $v) {
                           echo $k . ' => ' . $v,"\n";
                        }
                    }
                    else
                    {
                           echo $val,"\n";
                    }
                }
            ?>
            
            //Output:
              2
              test
              one => 1
              two => 2
              three => 3
              one => 1
              two => 2
              three => 3
            

            【讨论】:

            【解决方案16】:

            我使用的那个(它是一个类成员):

            const MAX_LEVEL = 5; // change it as needed
            
            public function arrayToObject($a, $level=0)
            {
            
                if(!is_array($a)) {
                    throw new InvalidArgumentException(sprintf('Type %s cannot be cast, array expected', gettype($a)));
                }
            
                if($level > self::MAX_LEVEL) {
                    throw new OverflowException(sprintf('%s stack overflow: %d exceeds max recursion level', __METHOD__, $level));
                }
            
                $o = new stdClass();
                foreach($a as $key => $value) {
                    if(is_array($value)) { // convert value recursively
                        $value = $this->arrayToObject($value, $level+1);
                    }
                    $o->{$key} = $value;
                }
                return $o;
            }
            

            【讨论】:

              【解决方案17】:

              递归是你的朋友:

              function __toObject(Array $arr) {
                  $obj = new stdClass();
                  foreach($arr as $key=>$val) {
                      if (is_array($val)) {
                          $val = __toObject($val);
                      }
                      $obj->$key = $val;
                  }
              
                  return $obj;
              }
              

              【讨论】:

                【解决方案18】:

                这需要 PHP7,因为我选择使用 lambda 函数来锁定主函数中的“innerfunc”。 lambda 函数被递归调用,因此需要:“use (&$innerfunc)”。你可以在 PHP5 中做到这一点,但无法隐藏 innerfunc。

                function convertArray2Object($defs) {
                    $innerfunc = function ($a) use ( &$innerfunc ) {
                       return (is_array($a)) ? (object) array_map($innerfunc, $a) : $a; 
                    };
                    return (object) array_map($innerfunc, $defs);
                }
                

                【讨论】:

                  【解决方案19】:

                  使用我制作的这个功能:

                  function buildObject($class,$data){
                      $object = new $class;
                      foreach($data as $key=>$value){
                          if(property_exists($class,$key)){
                              $object->{'set'.ucfirst($key)}($value);
                          }
                      }
                      return $object;
                  }
                  

                  用法:

                  $myObject = buildObject('MyClassName',$myArray);
                  

                  【讨论】:

                    【解决方案20】:

                    一个班轮

                    $object= json_decode(json_encode($result_array, JSON_FORCE_OBJECT));
                    

                    【讨论】:

                    • 请注意,存储在原始数组中的引用(例如对其他数组)将被此单行复制。假设数组中的键 x 包含对另一个数组的引用。那么$object-&gt;x在你的单行执行之后将是$result_array['x']的副本,而不是相同的数组。
                    【解决方案21】:

                    简单:

                    $object = json_decode(json_encode($array));
                    

                    例子:

                    $array = array(
                        'key' => array(
                            'k' => 'value',
                        ),
                        'group' => array('a', 'b', 'c')
                    );
                    
                    $object = json_decode(json_encode($array));
                    

                    那么,以下是正确的:

                    $object->key->k === 'value';
                    $object->group === array('a', 'b', 'c')
                    

                    【讨论】:

                    • 我认为这是一种解决方法。为什么要将数组编码为 json 然后解码呢?这对我来说不是一个最佳决定。
                    • @Julian,因为它以递归方式工作,以正确定义且足够可靠(“标准”)的方式执行,并且速度也足够快,可以替代随机手工编码的猴子魔法。
                    【解决方案22】:

                    您也可以通过在变量左侧添加 (object) 来创建新对象。

                    <?php
                    $a = Array
                        ( 'status' => " text" );
                    var_dump($a);
                    $b = (object)$a;
                    var_dump($b);
                    var_dump($b->status);
                    

                    http://codepad.org/9YmD1KsU

                    【讨论】:

                    【解决方案23】:

                    使用json_encode 是有问题的,因为它处理非UTF-8 数据的方式。值得注意的是,json_encode/json_encode 方法也将非关联数组保留为数组。这可能是也可能不是您想要的。我最近需要重新创建此解决方案的功能,但不使用 json_ 函数。这是我想出的:

                    /**
                     * Returns true if the array has only integer keys
                     */
                    function isArrayAssociative(array $array) {
                        return (bool)count(array_filter(array_keys($array), 'is_string'));
                    }
                    
                    /**
                     * Converts an array to an object, but leaves non-associative arrays as arrays. 
                     * This is the same logic that `json_decode(json_encode($arr), false)` uses.
                     */
                    function arrayToObject(array $array, $maxDepth = 10) {
                        if($maxDepth == 0) {
                            return $array;
                        }
                    
                        if(isArrayAssociative($array)) {
                            $newObject = new \stdClass;
                            foreach ($array as $key => $value) {
                                if(is_array($value)) {
                                    $newObject->{$key} = arrayToObject($value, $maxDepth - 1);
                                } else {
                                    $newObject->{$key} = $value;
                                }
                            }
                            return $newObject;
                        } else {
                    
                            $newArray = array();
                            foreach ($array as $value) {
                                if(is_array($value)) {
                                    $newArray[] = arrayToObject($value, $maxDepth - 1);
                                } else {
                                    $newArray[] = $value;
                                }                
                            }
                            return $newArray;
                        }
                    }
                    

                    【讨论】:

                      【解决方案24】:

                      世界上最好的方法:)

                      function arrayToObject($conArray)
                      {
                          if(is_array($conArray)){
                              /*
                              * Return array converted to object
                              * Using __FUNCTION__ (Magic constant)
                              * for recursive call
                              */
                              return (object) array_map(__FUNCTION__, $conArray);
                          }else{
                              // Return object
                              return $conArray;
                          }
                      }
                      

                      如果你使用不同的方法,你会遇到问题。这是最好的方法。你见过。

                      【讨论】:

                        【解决方案25】:

                        显然只是对其他一些人的答案的推断,但这里的递归函数可以将任何多维数组转换为对象:

                           function convert_array_to_object($array){
                              $obj= new stdClass();
                              foreach ($array as $k=> $v) {
                                 if (is_array($v)){
                                    $v = convert_array_to_object($v);   
                                 }
                                 $obj->{strtolower($k)} = $v;
                              }
                              return $obj;
                           }
                        

                        请记住,如果数组有数字键,它们仍然可以通过使用 {} 在结果对象中引用(例如:$obj-&gt;prop-&gt;{4}-&gt;prop

                        【讨论】:

                          【解决方案26】:

                          将多维数组转化为一个对象。此代码用于转换 Bing 搜索 API 的 try 和 catch 方法。

                          try {
                                  // Perform the Web request and get the JSON response
                                  $context = stream_context_create($options);
                                  $results = file_get_contents($url . "?cc=" . $country . "&category=" . $type, false, $context);
                                  $results = json_decode($results);
                                  return response()->json($results);
                              } catch (\Exception $e) {
                                  $results = array('value' => array(
                                          (object) array(
                                              "name" => "Unable to Retrive News",
                                              "url" => "http://www.sample.com/",
                                              "image" => (object) array("thumbnail" => (object) array("contentUrl" => "")),
                                              "publishedAt" => "",
                                              "description" => "")
                                      )
                                  );
                                  $results = (object) $results;
                                  return response()->json($results);
                              }
                          

                          【讨论】:

                            【解决方案27】:

                            你可以使用反射:

                            <?php
                            
                            $array = ['name'=>'maria','age'=>33];
                            
                            class Person {
                            
                                public $name;
                                public $age;
                            
                                public function __construct(string $name, string $age){
                                    $this->name  = $name;
                                    $this->age = $age;
                                }
                            }
                            
                            function arrayToObject(array $array, string $class_name){
                            
                                $r = new ReflectionClass($class_name);
                                $object = $r->newInstanceWithoutConstructor();
                                $list = $r->getProperties();
                                foreach($list as $prop){
                                  $prop->setAccessible(true);
                                  if(isset($array[$prop->name]))
                                    $prop->setValue($object, $array[$prop->name]);
                                } 
                            
                                return $object;
                            
                            }
                            
                            $pessoa1 = arrayToObject($array, 'Person');
                            var_dump($pessoa1);
                            

                            【讨论】:

                              【解决方案28】:

                              CakePHP 有一个递归 Set::map 类,它基本上将一个数组映射到一个对象。您可能需要更改数组的外观,以使对象看起来像您想要的那样。

                              http://api.cakephp.org/view_source/set/#line-158

                              在最坏的情况下,您也许可以从这个函数中获得一些想法。

                              【讨论】:

                                【解决方案29】:

                                受所有这些代码的启发,我尝试创建一个增强版本,支持:特定类名、避免构造方法、“bean”模式和严格模式(仅设置现有属性):

                                    class Util {
                                
                                static function arrayToObject($array, $class = 'stdClass', $strict = false) {
                                        if (!is_array($array)) {
                                            return $array;
                                        }
                                
                                        //create an instance of an class without calling class's constructor
                                        $object = unserialize(
                                                sprintf(
                                                        'O:%d:"%s":0:{}', strlen($class), $class
                                                )
                                        );
                                
                                        if (is_array($array) && count($array) > 0) {
                                            foreach ($array as $name => $value) {
                                                $name = strtolower(trim($name));
                                                if (!empty($name)) {
                                
                                                    if(method_exists($object, 'set'.$name)){
                                                        $object->{'set'.$name}(Util::arrayToObject($value));
                                                    }else{
                                                        if(($strict)){
                                
                                                            if(property_exists($class, $name)){
                                
                                                                $object->$name = Util::arrayToObject($value); 
                                
                                                            }
                                
                                                        }else{
                                                            $object->$name = Util::arrayToObject($value); 
                                                        }
                                
                                                    }
                                
                                                }
                                            }
                                            return $object;
                                        } else {
                                            return FALSE;
                                        }
                                        }
                                }
                                

                                【讨论】:

                                  【解决方案30】:

                                  代码

                                  此功能与json_decode(json_encode($arr), false)相同。

                                  function arrayToObject(array $arr)
                                  {
                                      $flat = array_keys($arr) === range(0, count($arr) - 1);
                                      $out = $flat ? [] : new \stdClass();
                                  
                                      foreach ($arr as $key => $value) {
                                          $temp = is_array($value) ? $this->arrayToObject($value) : $value;
                                  
                                          if ($flat) {
                                              $out[] = $temp;
                                          } else {
                                              $out->{$key} = $temp;
                                          }
                                      }
                                  
                                      return $out;
                                  }
                                  

                                  测试

                                  测试 1:平面数组

                                  $arr = ["a", "b", "c"];
                                  var_export(json_decode(json_encode($arr)));
                                  var_export($this->arrayToObject($arr));
                                  

                                  输出:

                                  array(
                                      0 => 'a',
                                      1 => 'b',
                                      2 => 'c',
                                  )
                                  array(
                                      0 => 'a',
                                      1 => 'b',
                                      2 => 'c',
                                  )
                                  

                                  测试 2:对象数组

                                  $arr = [["a" => 1], ["a" => 1], ["a" => 1]];
                                  var_export(json_decode(json_encode($arr)));
                                  var_export($this->arrayToObject($arr));
                                  

                                  输出:

                                  array(
                                      0 => stdClass::__set_state(array('a' => 1,)),
                                      1 => stdClass::__set_state(array('a' => 1,)),
                                      2 => stdClass::__set_state(array('a' => 1,)),
                                  )
                                  array(
                                      0 => stdClass::__set_state(array('a' => 1,)),
                                      1 => stdClass::__set_state(array('a' => 1,)),
                                      2 => stdClass::__set_state(array('a' => 1,)),
                                  )
                                  

                                  测试 3:对象

                                  $arr = ["a" => 1];
                                  var_export(json_decode($arr));
                                  var_export($this->arrayToObject($arr));
                                  

                                  输出:

                                  stdClass::__set_state(array('a' => 1,))
                                  stdClass::__set_state(array('a' => 1,))
                                  

                                  【讨论】:

                                    猜你喜欢
                                    • 2022-01-14
                                    • 2012-01-11
                                    • 1970-01-01
                                    • 2015-12-10
                                    • 1970-01-01
                                    • 1970-01-01
                                    • 2019-01-08
                                    • 2011-04-30
                                    • 2012-02-28
                                    相关资源
                                    最近更新 更多