Plase、help!
必要最初の要素DOMNodeList $myDivs
から削除されますが、実際の削除は行われません。要素が残ります。DOMNodeListからDOMElementが削除されていないようです
$dom = new DOMDocument();
$dom->loadHTML($file);
$xpath = new DOMXPath($dom);
$myDivs = $xpath->query('//div[@data-name|data-price]');
usleep(1);
//Must REVERSE iterate DOMNodeList.
for ($i = $myDivs->length - 1; $i >= 0; $i--) {
//Deleting 1st element of (DOMNodeList) $myDivs, containing advertisement product
if ($i == 0) {
//Removing div element (DOMNode) from DOM? DOMNodeList? Nothing changes
$result = $myDivs->item($i)->parentNode->removeChild($myDivs->item($i));
}
//Adding formatted string of attributes of valid DOMElements (div)
$outputArr[] = printf('%1$s - %2$s, %3$s.<br>',
$myDivs->item($i)->getAttribute('data-name'),
$myDivs->item($i)->getAttribute('data-price'),
$myDivs->item($i)->getAttribute('data-currency'))
?? null;
}
for(){}
逆反復するて、それはphp.netから思えるよう、XPathと最後の繰り返しで取り込ま($i=0
、素子#0)DOMElementのは、どこにでも(DOMとのDOMNodeList)からパージする必要があります。
You can modify, and even delete, nodes from a DOMNodeList if you iterate backwards
しかしそれは起こらない!
エラーが発生しない、$result
は、私はラインusleep(1);
で$myDivs->length=31
を取得し、ライン$outputArr[] =...
で、私はまだの同じ長さを持つデバッグ中
を(removeChild()
が、それは正しく仕事です行っているという意味)その正確な要素#0に等しいです。
...
は私が...
P.S.を欠けているものを見ることができないではないはずですしながら、だから、素子#0はまだ、$ouputArr
に付加されますもちろん、そのような状況は、常にちょうどcontinue
を使用して反復をジャンプすることができますが、を削除すると約はどうですか?
ポジション1のアイテムを2回追加することを賭けます。 –
@PatrickQ、正確ではありません。コードの後半で '$ outputArr'を表示しています。だから、私は要素#0が '$ outputArr'に入ると確信しています。ユニークなコンテンツを持っていますので、間違いありません。 –