2013-03-17 2 views
0

Я не могу понять поведение кода:Как эхо XML как простая строка?

Вход:

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

Почему строка приходят в конце вывода?

Вот ссылка на codepad: http://codepad.org/2dbiCelb

+0

Есть ли одна строка или заявление, которое вы не понимаете? –

+0

Почему строка «привет» и «мир» подходит к концу вывода? Я поставил это в начале и в конце. – nit3ch

ответ

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; 
?> 
+0

я нужен точный результат, как мир да нет не знаю привет Но приведенный выше код не возвращая что-либо, моя причина использовать эхо, а не возвращение, так это то, что return дает otput как: world yes hello – nit3ch

+0

Вы пытались запустить код, который я разместил в комментарии? Точный вывод: мир да нет не знаю привет. Причина, по которой она вернется как мир yes привет, это потому, что команда return находится внутри цикла foreach и, таким образом, выходит из функции после обработки первого элемента массива. – n0tiz

+0

спасибо, что это сработало. – nit3ch

1

Ваша функция не перенастройки ничего. Вы эхо прямо в этой функции.

Итак, сначала вы вызываете polldaddy_choices, что и ehos html. Затем эхо:

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

Строго, «мир». НОЛЬ . «hello» ', но' NULL' обрабатывается как '' '' при принуждении к строке, поэтому это тонкая разница. – IMSoP

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); 
} 
+0

поэтому, когда я пытаюсь вернуть $ ответ вместо эхо, то я получить выход как: мир не знаю привет Но мне нужно это повторить такой же, как нет.не из строк в массиве, поэтому я пытался повторить – nit3ch

Смежные вопросы