我在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] =>
)
)
答案 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);
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
查看输出