显示该值的最小值和相关字段

时间:2013-11-18 03:37:12

标签: php xml

Php新秀在这里,我知道这应该很简单,但无法使其发挥作用。

我有一个xml数据(由第三方提供商发送),我想在我的网站上显示。我已经使用simplexml解析了xml。 我可以在$ xml-> Outputs-> Company。

中访问“Company”
<Company>
    <Name key="1">Company One</Name>
    <Amount_1>20</Amount_1>
    <Amount_2>25</Amount_2>
    <Amount_3>30</Amount_3>
    <Amount_4>40</Amount_4>
</Company>
<Company>
    <Name key="2">Company Two</Name>
    <Amount_1>21</Amount_1>
    <Amount_2>24</Amount_2>
    <Amount_3>17</Amount_3>
    <Amount_4>19</Amount_4>
</Company>

我想要做的是通过“全部”金额并输出最低值。

输出最低值后,我需要连接/显示提供该值的公司名称。

示例:

“公司二”提供最低价值,报价为“17”。

谢谢。

1 个答案:

答案 0 :(得分:0)

使用simplexmlxpath选择所有金额,获得最低金额,再次使用xpath来检索公司名称:

$xml = simplexml_load_string($x); // assume XML in $x
$amounts = $xml->xpath("//*[substring(name(),1, 7) = 'Amount_']");
$min = min(array_map('intval', $amounts));
$company = $xml->xpath("//*[substring(name(),1, 7) = 'Amount_' and .='$min']/../Name")[0];
echo "$company offers the article for $min.";

输出:

Company Two offers the article for 17.

评论:

  • 第2行:选择以Amount_开头的所有节点并将其填入$amounts - &gt;顺便说一句,在XML中显示的方式使用节点名称是非常糟糕的。使用任意数量的<amount>节点可以更容易,您可以使用xPath轻松选择这些节点,因为它们都具有相同的名称。
  • 第3行:使用array_map()$amounts中的项目从simplexml_objects转换为integers
  • 第3行:并使用min()将最小值保存到$min
  • 第4行:再次使用xpath选择Company/Name有孩子<Amount_*>,其值为$min
  • 第5行:echo它。

看到它有效:https://eval.in/69520