©
This document uses PHP Chinese website manual Release
(PHP 5 >= 5.1.0)
RecursiveArrayIterator::hasChildren — Returns whether current entry is an array or an object.
Returns whether current entry is an array or an object for which an iterator can be obtained via RecursiveArrayIterator::getChildren() .
此函数没有参数。
Returns TRUE
if the current entry is an array or an object ,
otherwise FALSE
is returned.
Example #1 RecursiveArrayIterator::hasChildren() example
<?php
$fruits = array( "a" => "lemon" , "b" => "orange" , array( "a" => "apple" , "p" => "pear" ));
$iterator = new RecursiveArrayIterator ( $fruits );
while ( $iterator -> valid ()) {
// Check if there are children
if ( $iterator -> hasChildren ()) {
// print all children
foreach ( $iterator -> getChildren () as $key => $value ) {
echo $key . ' : ' . $value . "\n" ;
}
} else {
echo "No children.\n" ;
}
$iterator -> next ();
}
?>
以上例程会输出:
No children. No children. a : apple p : pear
[#1] Dominik [2015-01-23 11:20:52]
hasChildren() works as documented here, but not as its name suggests.
The method does not return whether the current entry actually *has* children. It only returns whether the element's type is one that is able to have children.
This is a bit counterintuitive if you are processing empty arrays.
Example:
<?php
$data = array(
"element one" => array(true),
"element two" => array(),
"element three" => array(true),
);
$i = new RecursiveIteratorIterator(new RecursiveArrayIterator($data),RecursiveIteratorIterator::SELF_FIRST);
foreach($i as $key => $value)
{
$type = gettype($value);
$depth = $i->getDepth();
if($i->hasChildren()) {
echo "$depth: $key ($type) has children\n";
} else {
echo "$depth: $key ($type) has no children\n";
}
}
?>
Result:
0: element one (array) has children
1: 0 (boolean) has no children
0: element two (array) has children
0: element three (array) has children
1: 0 (boolean) has no children