【问题标题】:PHP - is there a way to use an xml attribute and transform it into a php variable?PHP - 有没有办法使用 xml 属性并将其转换为 php 变量?
【发布时间】:2014-08-20 09:27:16
【问题描述】:

我有一个以这种方式制作的 XML:

<marketstat>
 <type id="17889">
  <buy>
   <volume>15005046</volume>
   <avg>704.84</avg>
   <max>755.88</max>
   <min>428.10</min>
   <stddev>58.87</stddev>
   <median>753.77</median>
   <percentile>755.87</percentile>
  </buy>
  <sell>
   <volume>43601243</volume>
   <avg>1017.32</avg>
   <max>1697.90</max>
   <min>917.94</min>
   <stddev>190.56</stddev>
   <median>953.01</median>
   <percentile>917.94</percentile>
  </sell>
 </type>
 <type id="44">
  <buy>
   <volume>15005046</volume>
   <avg>704.84</avg>
   <max>755.88</max>
   <min>428.10</min>
   <stddev>58.87</stddev>
   <median>753.77</median>
   <percentile>755.87</percentile>
  </buy>
  <sell>
   <volume>43601243</volume>
   <avg>1017.32</avg>
   <max>1697.90</max>
   <min>17.9</min>
   <stddev>190.56</stddev>
   <median>953.01</median>
   <percentile>917.94</percentile>
  </sell>
 </type>
</marketstat>

有没有办法我可以在标签类型中获取属性 id 并将其转换为具有相同名称的 php 变量,从而在 xml 中赋予它一个值?

我的目标是为每个 id 设置一个变量,并在 xml 中分配 sell->min 的值,这样我就可以调用它进行一些计算。

类似:

$17889 = "917.94";
$44 = "17.9";

或者我唯一能做的就是使用 $xml->xpath('//marketstat/type[@id="17889"]/sell/min');每次我想得到它的价值?

【问题讨论】:

  • 我刚刚更新了我的答案

标签: php xml xpath


【解决方案1】:

是的,不是的。这是可能的,但不可能有像“$17889”这样的变量,因为变量名必须以字母或下划线开头。 http://php.net/manual/en/language.variables.basics.php

现在,如果您想要 $_17889 = "917.94";$_44 = "17.9"; 之类的东西,那么在 id 前面加上下划线,您可以执行以下操作:

$result = $xml->xpath('//marketstat/type');
while(list( , $node) = each($result)) {
    $attr = $node->attributes();
    $id = "_" . $attr['id'];
    $$id = $node->sell[0]->min[0];
}

【讨论】:

    【解决方案2】:

    感谢你的建议 nl-x 我已经能够解开这个谜题了。

    我刚刚“破解”了你的代码,我觉得使用起来更舒服,一个普通的 foreach 循环

    foreach ($xml->marketstat->type as $type)
            {
            $typeid = $type[id];
            $id = "_" . $typeid;
            $$id = $type->sell->min;
            }
    

    再次感谢。

    【讨论】:

    • 你需要把[id]改成['id']。否则它可能会抛出通知。
    猜你喜欢
    • 2011-06-18
    • 2021-03-08
    • 2020-11-26
    • 2022-11-11
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 2015-08-01
    相关资源
    最近更新 更多