PHP 为什么 array_walk 不能与 DOMDocument::getElementsByTagName 一起使用
PHP Why does array_walk not work with DOMDocument::getElementsByTagName
只是想知道为什么下面的代码不遍历
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()
的 return 值是 DOMNodeList
对象 ,而不是数组:DOMNodeList
对象是 Traversable
,所以 foreach()
会遍历它;但是 array_walk()
需要一个 actual 数组参数,所以它不能与 array_walk()
.
一起使用
使用不是数组的参数调用 array_walk()
不会生成错误,但会生成警告,并且会 return 布尔值 false
.
只是想知道为什么下面的代码不遍历
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()
的 return 值是 DOMNodeList
对象 ,而不是数组:DOMNodeList
对象是 Traversable
,所以 foreach()
会遍历它;但是 array_walk()
需要一个 actual 数组参数,所以它不能与 array_walk()
.
使用不是数组的参数调用 array_walk()
不会生成错误,但会生成警告,并且会 return 布尔值 false
.