appendChild с использованием оператора foreach - PullRequest
1 голос
/ 11 декабря 2011

Этот код добавляет только последнее целое число в операторе for. Я пытаюсь добавить $ root_text для каждого значения в инструкции for. $ Root_text должен быть массивом? Я только добавляю 1 значение с помощью $ root-> appendChild ($ root_text)

код:

 <?php
$doc = new DOMDocument('1.0', 'iso-8859-1');

$root = $doc->createElement('test');
$doc->appendChild($root);

for($i = 1; $i <= 10; $i++) {

    $root_text = $doc->createTextNode($i);

}

$root->appendChild($root_text);

print $doc->saveXML();
?>

Ответы [ 2 ]

1 голос
/ 11 декабря 2011

Вы в настоящее время присваиваете новое значение $root_text каждый раз через цикл, сохраняя (и в конечном итоге добавляя) только узел из последней итерации.Почему не просто appendChild прямо в цикле?

for($i = 1; $i <= 10; $i++) {
    $test = $doc->createElement('test');
    $test->appendChild($doc->createTextNode($i));
    $root->appendChild($test);
}
0 голосов
/ 11 декабря 2011

То, что вы делаете там, заменяет $ root_text на $ doc-> createTextNode ($ i) в каждом цикле. Что вы можете сделать, это сделать $ root_text массивом.

<?php
    $doc = new DOMDocument('1.0', 'iso-8859-1');

    $root = $doc->createElement('test');
    $doc->appendChild($root);

    $root_text = array(); //always initialize arrays
    for($i = 1; $i <= 10; $i++) {
        $root_text[] = $doc->createTextNode($i);
    }

    //this will output the contents of $root_text so you can examine it
    print_r($root_text);

    $root->appendChild($root_text);

    print $doc->saveXML();
?>
...