【发布时间】:2015-10-05 14:44:28
【问题描述】:
只是想知道为什么下面的代码没有迭代
DOMDocument::getElementsByTagName
<?php
$dom = new DOMDocument();
$dom->preserveWhiteSpace = false;
$dom->loadHTML('<html><head>...blablabla...</html>');
$elements = $dom->getElementsByTagName('div');
array_walk($elements, 'var_dump'); // doesn't work ?>
但以下代码确实工作:
<?php
$dom = new DOMDocument();
$dom->preserveWhiteSpace = false;
$dom->loadHTML('<html><head>...blablabla...</html>');
$elements = $dom->getElementsByTagName('div');
foreach($elements as $element) {
var_dump($element); // does work
} ?>
【问题讨论】:
-
getElementsByTagName()的返回值是DOMNodeListobject,而不是array;它是Traversable,所以foreach可以工作,但array_walk()需要一个实际的数组参数 -
@MarkBaker 这就是答案...
-
@MarkBaker 有趣的是
array_walk在使用非数组调用时不会产生错误,不是吗? -
来自 PHP 文档:
Returns TRUE on success or FALSE on failure.,但如果您启用了错误日志记录,它也会发出警告 - Demo -
@MarkBaker 你可以添加这个作为答案。我愿意接受这个作为答案。尽管我希望 PHP 会产生错误,但它确实如此。 (也许应该更好地阅读 array_walk 的 php 手册):)
标签: php domdocument array-walk