Plase, help!
Need zu löschen 1. Element von DOMNodeList $myDivs
, aber tatsächliche Entfernung nicht auftreten - Element bleibt.DOMEelement scheint nicht aus DOMNodeList entfernt zu werden
$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(){}
Reverse iteriert durch $myDivs
, geholt von XPath und letzten Iteration ($i=0
, Element # 0) DOMElement sollte überall (DOM und DOMNodeList) gespült werden, wie es von php.net scheint:
You can modify, and even delete, nodes from a DOMNodeList if you iterate backwards
Aber es passiert nicht!
keine Fehler auftreten, $result
gleich dem genauen Element # 0 (was bedeutet, removeChild()
Job ist es richtig gemacht hat)
Während ich $myDivs->length=31
in Zeile usleep(1);
bekommen Debuggen und in Zeile $outputArr[] =...
Ich habe immer noch gleich lang $myDivs
.
So Element # 0 noch wird auf $ouputArr
angefügt, während sollte nicht ...
kann nicht sehen, was ich bin fehlt ...
P. S. natürlich, ist solche Situation kann man immer einfach continue
verwenden, um durch Iteration zu springen, aber was ist mit löschen?
Ich wette, es ist das Hinzufügen der Artikel in Position 1 zweimal –
@PatrickQ, nicht genau. Später im Code drucke ich $ outputArr. Also bin ich mir sicher, dass Element # 0 in $ outputArr gelangt, während souhld nicht. Es hat einen einzigartigen Inhalt, also keinen Zweifel. –