将对象放入数组

时间:2016-05-11 04:18:20

标签: php

我在PHP方面不是很先进,只是基本的我能理解。我正在尝试API并将其作为对象返回,如何将其转换为数组?我通过stackoverflow搜索并发现了很多解决方案,但没有一个对我有用。 $ array返回空数组。这是我的代码: -

while (1) {

    $line = '';
    $w->pollMessage();
    $msgs = $w->getMessages();
    foreach ($msgs as $m) {

        print_r($msgs);
        $array = json_decode(json_encode($msgs), true);
        print_r($array);
}

这是我得到print_r($ msgs)的结果:

Array
(
    [0] => ProtocolNode Object
        (
            [tag:ProtocolNode:private] => message
            [attributeHash:ProtocolNode:private] => Array
                (
                    [from] => amy
                    [type] => text
                    [id] => 3EB0E191F15B831D244E
                    [t] => 1462939886
                    [notify] => Nick
                )

            [children:ProtocolNode:private] => Array
                (
                    [0] => ProtocolNode Object
                        (
                            [tag:ProtocolNode:private] => enc
                            [attributeHash:ProtocolNode:private] => Array
                                (
                                    [v] => 2
                                    [type] => msg
                                )

                            [children:ProtocolNode:private] =>
                            [data:ProtocolNode:private] => 3

                        )

                    [1] => ProtocolNode Object
                        (
                            [tag:ProtocolNode:private] => body
                            [attributeHash:ProtocolNode:private] =>
                            [children:ProtocolNode:private] =>
                            [data:ProtocolNode:private] => good
                        )

                )

            [data:ProtocolNode:private] =>
        )

)

2 个答案:

答案 0 :(得分:0)

我没有看到你的问题。你已经有了一个数组,不需要处理json。如果你不喜欢它作为数组,你可以简单地将它转换为一个对象。

$myArray = (object) $myArray;

答案 1 :(得分:0)

要求:遍历多路对象树并将callback应用于每个节点。

Working demonstration at eval.in

说明:

1)有很多私有财产,我不确定是否会投射到阵列中。我们会嘲笑他们。

2)如果您有原始课程,那么您可能想要使用其中的一些方法。

我使用的方法是:

a)提供树木漫步'这将访问树中的所有节点。我不关心访问的顺序。只是为了访问所有人。

b)而不是提供处理节点的特定代码。我提供了一个回调'钩。

c)因为我没有上课,所以我创建了一个简单的课程,让我可以轻松访问私人房产。

树步行功能:

 function walkProtocolNodes(\ProtocolNode $currentNode, /* callable */ $processNode)
 {
     $processNode($currentNode); 

     foreach ($currentNode->children as $nextNode) {
         walkProtocolNodes($nextNode, $processNode);
     }
     return;
 }

示例processNode函数:

它只是将attributesHash附加到输出数组(outputResults)...

 $processNode = function (\ProtocolNode $node) use (&$outputResults) {
     $outputResults[] = $node->attributeHash;
 };

运行tree walk

walkProtocolNodes($node1, $processNode);

' protocolNode'我使用过的课程:

class ProtocolNode {

    private $tag = 'message';
    private $attributeHash = array();
    private $children = array();
    private $data = 'good';

    public function __construct($attrs = array()) {
        $this->attributeHash = $attrs;
    }

    public function addChild(\ProtocolNode $node) {
        $this->children[] = $node;
    }

    public function __get($propertyName) {
        return $this->$propertyName;
    }
}

请参阅demonstration查看输出