假设我想要一个地方有一个电话号码列表。 有些地方会有1个电话号码,有些会有不止一个。其他人根本就没有。
问题在于:
$xml->addChild('phone_number','555.555.5555');
创建一个不可迭代的phone_number文本节点:
$response->xml->phone_number;
但是这个:
$xml->addChild('phone_number','555.555.5555');
$xml->addChild('phone_number','555.555.5556');
创建一个可迭代的phone_number数组:
$response->xml->phone_number[0];
$response->xml->phone_number[1];
这给客户带来了不必要的负担。他们必须检测结果是否可迭代,并相应地修改其代码。
如果我总能发回一个可交换的数组,即使它中有0或1个项目,那将会更好......但是我还没有找到任何关于如何执行此操作的文档。在Perl中,我相信它被称为“forcearray”,但我还没有找到PHP的等价物,这是我需要的。
答案 0 :(得分:3)
不要使用这个花哨的魔术界面($obj->xml->phone_number[x]
)并使用SimpleXMLElement::children()
method,它总是返回可迭代对象。
答案 1 :(得分:2)
你应该考虑这个
<phone_numbers>
<phone_number>555.555.5555</phone_number>
</phone_numbers>
这更灵活
在children()
方法旁边,您还可以考虑xpath
总是会产生一个要返回的数组
例如
$xml = <<<XML
<person>
<phone_numbers>
<phone_number>555.555.5555</phone_number>
</phone_numbers>
</person>
XML;
$obj = simplexml_load_string($xml);
$tels = $obj->xpath("//phone_numbers/*");
/* even more simple */
$tels = $obj->phone_numbers->children();