【问题标题】:Convert Array to User Defined Object in PHP [closed]在 PHP 中将数组转换为用户定义的对象 [关闭]
【发布时间】:2015-07-07 09:58:24
【问题描述】:

我有一个数组如下 -

$xml= array(
                'name'=> 'Arun',
                'roll' => '12345',
                'id' => '1'
        );

我希望将其转换为用户定义的对象 [不是 stdClass 也不是 SimpleXMLObject]

我想要类似下面的东西-

UserDefinedObject Object 
(
    [name] => Arun
    [roll] => 12345
    [id] => 1
)

我做了类似 belo 的事情,它给了我 stdClass 对象,但我需要它是 UserDefined -

public static function convert($xml)
    {
        //$array = new ConvertArrayToXML($xml);
        //return $array;
        //return((Object)$xml);
        foreach($xml as $key => $value)
        {
            if(is_array($value))
            {
                $array[$key] = self::convert($value);
            }
        }
        return (object)$xml;
    }

我知道这可能听起来很傻,但我对在 php 中转换用户定义的对象非常陌生。

请指点一下。

谢谢。

【问题讨论】:

  • @Arun:您之前的问题已被关闭是有原因的。请不要在网站上进行无用的重复发帖。关于如何在现场使用 PHP 将数组转换为 XML 的问题确实存在很多。关于如何将数组转换为用户定义类的问题也是如此。请先搜索现有材料。此外,你有一些稍微提出要求的倾向,很可能你会扭转大部分发现。另见meta.stackexchange.com/questions/66377/what-is-the-xy-problem
  • 这对我来说是例如谷歌上的第一次点击:stackoverflow.com/q/1869091/367456 - 搜索是“数组到对象 php” - 只是说。
  • @casperone 版主您好。你能看看我的问题哪个 hakre 标记为重复,让我知道它们是否真的应该被标记为重复?我也不喜欢 hakre 在 StackOverFlow 上使用的那种语言。它根本不能接受。你们能做点什么吗?
  • @Arun Hakre 的语言没有问题,他的建议是有效的,尽管这个具体的关闭有点不合适。
  • @hakre 这不是您链接到的问题的重复项,请不要滥用 close-as-duplicate 单方面关闭问题,除非您找到 实际 重复项。

标签: php arrays xml stdclass user-defined


【解决方案1】:
$xml = [
    'name'=> 'Arun',
    'roll' => '12345',
    'id' => '1',
];

class UserDefinedObject { }

$myObj = new UserDefinedObject();
foreach($xml as $key => $value) { 
    $myObj->{$key} = $value; 
}

var_dump($myObj);

编辑

或轻微的变体:

$myObj = new UserDefinedObject();
array_walk($xml,
    function($value, $key) use ($myObj) {
        $myObj->{$key} = $value; 
    }
);

【讨论】:

  • 这个“类”只是一个名称不同的stdClass。它比使用普通的stdClass 更好吗?
  • 谢谢马克这是我正在寻找的东西。
  • @axiac....它根本不是一个stdClass,它可以有任何你想要的方法,等等,正如class UserDefinedObject { }....所定义的那样,只是因为我选择不写几个一百行类代码来保持这个例子的简短并不会使它成为一个用户定义的类
【解决方案2】:
class UserDefinedClass {
public $name;
public $roll;
public $id;

    function __construct($name,$roll,$id){
        $this->name = $name;
        $this->roll = $roll;
        $this->id = $id;
    }
}
$xml= array(
     'name'=> 'Arun',
     'roll' => '12345',
     'id' => '1'
);


$obj = new UserDefinedClass($xml['name'],$xml['roll'],$xml['id']);
// you can use and foreach for dynamic elements.
print_r($obj);

【讨论】:

  • 你不觉得这有点不灵活吗?
  • 简单易懂的例子,基于问题。
【解决方案3】:

$xml = array('name' => 'Arun', 'roll' => '12345', 'id' => '1');

类用户定义{

public $name;
public $roll;
public $id;

function __construct($xml) {
    $this->name = $xml['name'];
    $this->roll = $xml['roll'];
    $this->id = $xml['id'];
}

}

print_r(new UserDefined($xml));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-30
    • 2022-01-14
    • 1970-01-01
    • 2011-09-04
    • 1970-01-01
    • 2011-05-19
    相关资源
    最近更新 更多