【问题标题】:PHP foreach won't workPHP foreach 不起作用
【发布时间】:2018-08-22 07:29:21
【问题描述】:

我在这里做错了什么?

<?php
 $xml=simplexml_load_file("<dict>
 <key>ChannelID</key>
 <string>example</string>
 <key>ChannelDVRs</key>
 <array>
 <dict>
 <key>id</key>
 <string>LIVE</string>
 <key>name</key>
 <string>example1111</string>
 <key>description</key>
 <string>Live</string>
 <key>logoUrl</key>
 <string>http://www.example.com/logos/190x110/298.jpg</string>
 <key>logoUrlSD</key>
 <string>http://www.example.com/logos/190x110/298.jpg</string>
 <key>isVOD</key>
 <string>false</string>
 <key>StreamURL</key>
 <string>exampleessssssssssss test</string>
 </dict>
 </array>
 </dict>") 
 or die("Error: Cannot create object");

foreach ($xml->string as $output) {
echo "$output <br>";
}?>

如果有办法得到最后一个字符串 exampleessssssssssss test 我不需要使用 foreach。感谢您的帮助;)

【问题讨论】:

  • 那里是 url 链接,结果我只得到 example
  • 哦,这不是您的实际代码。而不是What am I doing wrong here?,您应该描述当前发生的事情。这个问题真的是I don't need to use foreach?,下面用end回答。

标签: php xml loops foreach


【解决方案1】:

您需要正确加载 XML 字符串,然后获取正确的元素。

$xml = simplexml_load_string(
    "<dict>
        <key>ChannelID</key>
        <string>example</string>
        <key>ChannelDVRs</key>
        <array>
            <dict>
                <key>id</key>
                <string>LIVE</string>
                <key>name</key>
                <string>example1111</string>
                <key>description</key>
                <string>Live</string>
                <key>logoUrl</key>
                <string>http://www.example.com/logos/190x110/298.jpg</string>
                <key>logoUrlSD</key>
                <string>http://www.example.com/logos/190x110/298.jpg</string>
                <key>isVOD</key>
                <string>false</string>
                <key>StreamURL</key>
                <string>exampleessssssssssss test</string>
            </dict>
        </array>
    </dict>") 
 or die("Error: Cannot create object");

echo end($xml->array->dict->string); //output exampleessssssssssss test

$xml-&gt;array-&gt;dict-&gt;string 是一个数组,因此end() 函数将获取最后一个元素,正如您所希望的那样。

【讨论】:

  • 现在在回显时如何使用 str_replace 函数?
  • 我会这样做 :) 它说:您可以在 4 分钟内接受答案
【解决方案2】:

只是一个替代方案,它不依赖于内容的任何顺序,而不是作为&lt;key&gt;StreamURL&lt;/key&gt; 之后的元素。这样可以确保如果将来有更改,代码不会停止工作。

$xml=simplexml_load_string("<dict>
 <key>ChannelID</key>
 <string>example</string>
 <key>ChannelDVRs</key>
 <array>
 <dict>
 <key>id</key>
 <string>LIVE</string>
 <key>name</key>
 <string>example1111</string>
 <key>description</key>
 <string>Live</string>
 <key>logoUrl</key>
 <string>http://www.example.com/logos/190x110/298.jpg</string>
 <key>logoUrlSD</key>
 <string>http://www.example.com/logos/190x110/298.jpg</string>
 <key>isVOD</key>
 <string>false</string>
 <key>StreamURL</key>
 <string>exampleessssssssssss test</string>
 </dict>
 </array>
 </dict>")
 or die("Error: Cannot create object");

$text = $xml->xpath('//key[text()="StreamURL"]/following-sibling::string/text()');
echo (string)$text[0];

使用 XPath 可让您根据元素内容进行搜索,然后选择以下 &lt;string&gt; 元素。由于xpath() 返回匹配节点列表,所以使用[0] 获取第一项。

【讨论】:

    【解决方案3】:

    使用以下代码更改 @Felippe Duarte 代码以使用 str_replace 回显

    $str =  end($xml->array->dict->string);
    $edited_str = str_replace("exampleessssssssssss","examples",$str);
    echo $edited_str;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-27
      • 2012-07-20
      • 2017-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-27
      相关资源
      最近更新 更多