PHP为什么array_walk不能与DOMDocument :: getElementsByTagName一起使用

时间:2015-10-05 14:44:29

标签: php domdocument array-walk

只是想知道为什么下面的代码没有通过
进行itterate DOM文档::的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
} ?>

1 个答案:

答案 0 :(得分:0)

getElementsByTagName()的返回值是DOMNodeList 对象,而不是数组:DOMNodeList对象为Traversable,因此{{1} 1}}将迭代它;但foreach()需要实际的数组参数,因此不能与array_walk()一起使用。

使用非数组的参数调用array_walk()不会生成错误,但会生成警告,并返回布尔值array_walk()的结果。