RecursiveArrayIterator::hasChildren
(PHP 5 >= 5.1.0)
RecursiveArrayIterator::hasChildren — Returns whether current entry is an array or an object.
Description
public bool RecursiveArrayIterator::hasChildren
( void
)
Returns whether current entry is an array or an object for which an iterator can be obtained via RecursiveArrayIterator::getChildren().
Parameters
This function has no parameters.
Return Values
Returns TRUE
if the current entry is an array or an object,
otherwise FALSE
is returned.
Examples
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();
}
?>
The above example will output:
No children. No children. a : apple p : pear
See Also
- RecursiveArrayIterator::getChildren() - Returns an iterator for the current entry if it is an array or an object.
Коментарии
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