0

コードの動作を理解できません:

入力:

<?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

4

3 に答える 3

1

あなたの関数は何も再調整していません。その関数で直接エコーしています。

したがって、最初に呼び出しますpolldaddy_choices。これはhtmlをエコーし​​ます。次に、エコーします。

$xml = "world" . "" . "hello" ;
于 2013-03-17T19:55:49.787 に答える
1

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);
}
于 2013-03-17T19:59:27.450 に答える
1

あなたの関数はすぐにxmlコードをエコーし​​ていました。以下のコードでは、変数($ answer = "";)を作成し、"。="を使用して変数の最後にxmlを追加します。関数の最後に、$answerの値を返します。

次に関数を呼び出すと($ 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;
?>
于 2013-03-17T20:01:25.793 に答える