1

グループを別のグループに移動したいのですが、何らかの方法で実行時間が長くなり、スクリプトが終了しません。問題は、foreach ループの残りの関数にあります。間違いは見当たりません

<?php
// fouten laten zien
error_reporting(~0); 
ini_set('display_errors', 1); 

// test bestand
$bestand = "00000000346.svg";

// maak nieuwe dom
$dom = new DOMDocument; 

// laat svg in dom
$dom->load($bestand);

// krijg svg element
$svg = $dom->getElementsByTagName("svg")->item(0);

// toevoegen link attribute
$svg->setAttribute("xmlns:xlink", "http://www.w3.org/1999/xlink");

// maak script tag
$script = $dom->createElement("script");

// zet script link
$script->setAttribute("xlink:href", "svg_zoom_pan.js");

// toevoegen aan svg
$dom->documentElement->appendChild($script);

// maak groep tag
$svgroot = $dom->createElement("g");

// zet een id
$svgroot->setAttribute("id", "svgroot");

// toevoegen aan svg
$dom->documentElement->appendChild($svgroot);

// krijg alle groepen
$groups = $dom->getElementsByTagName("g");

// doorloop groepen
foreach($groups as $group) {

    if($group->getAttribute("id") != "svgroot") {

        // clone groep
        $cloned = $group->cloneNode(true);

        // toevoegen aan svgroot groep  
        $dom->getElementById("svgroot")->appendChild($cloned);

    }
}

// opslaan bestand
$dom->save("svg_" . $bestand);

?>
4

1 に答える 1

1

getElementsByTagName、ノードのライブ リストを返します。つまり、ドキュメントにさらにグループを追加する$groupsと、それらの新しいグループを含むように変数が更新されます。

要素のライブ リストをループし、反復ごとにもう 1 つの要素を追加しているため、ライブ リストが長くなり、ループが終了しません。

于 2012-05-08T11:47:06.460 に答える