PHP 8.4.6 Released!

RecursiveArrayIterator::hasChildren

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

RecursiveArrayIterator::hasChildrenReturns whether current entry is an array or an object

Description

public RecursiveArrayIterator::hasChildren(): bool

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

User Contributed Notes

Dominik
10 years ago
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
To Top