【问题标题】:XML Multidimensional Array, Sort and referenceXML 多维数组、排序和引用
【发布时间】:2011-06-16 14:31:11
【问题描述】:

我真的没有得到数组,我读过很多例子,大部分是抄袭和修改的,我还没有找到我理解的帮助我希望有人能指导我完成这个,所以我完全理解。

我有一个 XML 文件,我需要读取并显示使用 PHP 进行排序的选项,然后将所需字段输出到我的页面中。我已经设法检索 XML 文件并在本地重新安置并检查文件的年龄(里程碑)并使用代码(如下)设法读取 XML 文件并输出为数组,但我无法再进一步,两次之后几天我向社区寻求帮助:

<?php

 function std_class_object_to_array($stdclassobject) {
  $_array = is_object($stdclassobject) ? get_object_vars($stdclassobject) : $stdclassobject;

    foreach ($_array as $key => $value) {
    $value = (is_array($value) || is_object($value)) ? std_class_object_to_array($value) : $value;
     $array[$key] = $value;
    }
   return $array; 
  }

  $request = $domain.$filename;
  $API_results = file_get_contents($request);
  $xml = new SimpleXMLElement($API_results);
  $Details = std_class_object_to_array($xml);

echo "<pre>";
print_r($Details[hotel]);
echo "</pre>"; ?>

输出看起来像这样(缩短)

Array
(
    [0] => Array
        (
            [hotel_ref] => 157258
            [hotel_name] => Hotel Kong Arthur

继续

[1] => Array
    (
        [hotel_ref] => 98813
        [hotel_name] => Hotel Lautruppark 

首先,我用来读取 XML 的代码好吗?有没有更好的方法可以使用?如何对结果进行排序?如何输出各个字段?

非常感谢您的帮助、示例和指导,

学习

//----------- 更新 --------- -- \

好的,这就是我现在建议使用 SimpleXML 的地方,但它仍然不正确,而且我还不是很进一步:

$request = $domain.$filename;
$xmlobj = simplexml_load_file($request);
$xml = simplexml_load_file($request) or die("NO XML");
foreach($xml as $hotels)
 echo $hotels->hotel_name." (".$hotels->hotel_ref.")<br/>";

【问题讨论】:

  • 为什么不直接使用 SimpleXmlElement?为什么它必须是一个数组?
  • 尝试了很多东西,现在我不记得了。现在阅读
  • 您能否发布一些 xml 数据,以及您希望它如何排序?
  • hotel_name 排序将是一个好的开始,我在前面的建议。
  • 你能看看我的更新吗,我需要给它添加排序.. 更好吗?

标签: php xml arrays


【解决方案1】:

您为读取 XML 编写的代码绝对没问题。

但是,您不必要地将 SimpleXMLElement 对象转换为数组,因为 SimpleXMLElement 已经是可迭代的。您可以访问 XML 的 &lt;hotel&gt; 元素,如下所示:

$Details->hotel[0]

您可以通过以下方式遍历&lt;hotel&gt; 的子元素:

<?php
// Loop through the elements, and with each...
foreach($Details->hotel[0] as $index => $hotel) {
    // ...output the name of the hotel:
    echo $hotel->hotel_name;
}
?>

这里,$index 将是数字索引,$hotel 将是另一个 SimpleXMLElement。

注意就结果排序而言,实际上可能值得进行对象到数组的转换。 PHP 中的所有排序函数都适用于数组,而不是 对象。

希望这会有所帮助!

【讨论】:

  • 在这里仍然很困惑,您说我“不必要地从 SimpleXMLElement 对象转换为数组”,然后说“就结果排序而言,实际上可能值得做对象-到数组转换”那么我不会将 XML 转换为数组并进行排序和输出吗?一切都非常混乱。
  • @Stuart:很抱歉有任何混淆 - 我可能应该改写我的答案!仅当您需要对结果进行排序时,才应该将 XML 对象转换为数组。
猜你喜欢
  • 2019-02-20
  • 2013-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多