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

[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"
    )

当前回答

实际上,如果你想在多维数组中使用这个你就需要使用一些递归。

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;
}

其他回答

实际上,如果你想在多维数组中使用这个你就需要使用一些递归。

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;
}

简单的方法是

$object = (object)$array;

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

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

$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-3倍的性能损失。

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

不同环境上的json_decode以不同的方式转换UTF-8数据。我最终在当地得到了“240.00”的值,在生产中得到了“240”——巨大的灾难。此外,如果转换失败,字符串get返回为NULL

CakePHP有一个递归的Set::map类,基本上是将数组映射到对象。为了使对象看起来像你想要的样子,你可能需要改变数组的样子。

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

最坏的情况下,您可能会从这个函数中得到一些想法。

你可以使用反射:

<?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);