【问题标题】:How to echo XML as simple string?如何将 XML 回显为简单字符串?
【发布时间】:2013-03-17 19:49:31
【问题描述】:

我无法理解代码的行为:

输入:

<?php
    function polldaddy_choices($choices) {
      foreach ($choices as $choice) {
        $answer = "<pd:answer>
                   <pd:text>" . $choice . "</pd:text>
                   </pd:answer>";
        echo $answer; 
     }
  }
  $total_choices = array('yes' , 'no' , 'do not know');
  $ans = polldaddy_choices($total_choices); 
  $xml = "world" . $ans . "hello" ;
  echo $xml;
?>

输出:

  <pd:answer>
      <pd:text></pd:text>
      </pd:answer><pd:answer>
      <pd:text></pd:text>
      </pd:answer><pd:answer>
      <pd:text></pd:text>
      </pd:answer>worldhello

为什么字符串会出现在输出的末尾?

这是键盘上的链接:http://codepad.org/2dbiCelb

【问题讨论】:

  • 有没有哪一行或一句话你不明白?
  • 为什么字符串 "hello" 和 "world" 即将结束输出?我把它放在开头和结尾。

标签: php echo


【解决方案1】:

您的函数立即回显了 xml 代码。在下面的代码中,您将看到我创建了一个变量 ($answer = "";),然后使用 ".=" 将 xml 附加到变量的末尾。在函数结束时,我返回 $answer 的值。

当你调用函数 then ($ans = polldaddy_choices($total_choices);) 时,它会将函数的返回值放入你的 $ans 变量中。

<?php
function polldaddy_choices($choices) {
  $answer = "";
  foreach ($choices as $choice) {
    $answer.= "<pd:answer>
               <pd:text>" . $choice . "</pd:text>
               </pd:answer>";
 }
 return $answer;
}
$total_choices = array('yes' , 'no' , 'do not know');
$ans = polldaddy_choices($total_choices); 
$xml = "world" . $ans . "hello" ;
echo $xml;
?>

【讨论】:

  • 我需要准确的输出作为世界 yesno 不知道你好 但是上面的代码没有返回任何东西,我使用echo的理由而不是 return 是 return 给出的 otput 为 :world yeshello
  • 你试过运行我放在评论中的代码吗?确切的输出是:worldyesnoanswer>不知道你好。之所以会返回 world yeshello,是因为 return 命令在 foreach 循环内,因此在处理数组的第一个元素。
【解决方案2】:

您的函数没有重新调整任何内容。您直接在该函数中回显。

所以首先你调用polldaddy_choices,它与html 相呼应。然后,你回应:

$xml = "world" . "" . "hello" ;

【讨论】:

  • 严格来说是"world" . NULL . "hello",但NULL 在强制转换为字符串时会被视为"",所以这是一个细微的差别。
【解决方案3】:

因为您正在 echo 处理您的 polldaddy_choices 函数中的输出。所以如下:

$ans = polldaddy_choices($total_choices);实际上是在打印XML,并且:

$xml = "world" . $ans . "hello"; 将简单地打印 worldhello,如 $ans === null

我想你可能想做一些类似的事情:

function polldaddy_choices($choices) {
    $answers = array();
    foreach ($choices as $choice) {
        $answer = "<pd:answer>
                   <pd:text>" . $choice . "</pd:text>
                   </pd:answer>";
        $answers[] = $answer;
    }

 return implode("\n", $answers);
}

【讨论】:

  • 所以当我试图返回 $answer 而不是 echo 时,我得到的输出为:world不知道 pd:answer>你好,但我需要这个重复与否相同。数组中的字符串,这就是我试图回显的原因
猜你喜欢
  • 2017-10-18
  • 2015-12-08
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
  • 2016-07-29
  • 2012-06-01
相关资源
最近更新 更多