PHP 8.6.0 Beta 1 is available for testing

RecursiveArrayIterator::hasChildren

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

RecursiveArrayIterator::hasChildren Определяет, является ли текущий элемент массивом или объектом

Описание

public function RecursiveArrayIterator::hasChildren(): bool

Определяет, является ли текущий элемент массивом (array ) или объектом (object ). Эти сведения необходимо проверять, прежде чем вызывать метод RecursiveArrayIterator::getChildren() .

Список параметров

Сигнатура функции не содержит параметров.

Возвращаемые значения

Возвращает true , если текущий элемент является массивом (array ) или объектом (object ), false в противном случае.

Примеры

Пример #1 Пример использования RecursiveArrayIterator::hasChildren()

<?php
$fruits = array("a" => "lemon", "b" => "orange", array("a" => "apple", "p" => "pear"));
$iterator = new RecursiveArrayIterator($fruits);
while ($iterator->valid()) {
 // проверим, есть ли дочерние элементы
 if ($iterator->hasChildren()) {
 // выведем информацию о дочерних элементах
 foreach ($iterator->getChildren() as $key => $value) {
 echo $key . ' : ' . $value . "\n";
 }
 } else {
 echo "Дочерних элементов нет.\n";
 }
 $iterator->next();
}
?>

Результат выполнения приведённого примера:

Дочерних элементов нет.
Дочерних элементов нет.
a : apple
p : pear

Смотрите также

  • RecursiveArrayIterator::getChildren() - Возвращает итератор для текущего элемента, если этот элемент является массивом (array) или объектом (object)

Нашли ошибку?

ИнструкцияИсправлениеСообщение об ошибке
+Добавить

Примечания пользователей 1 note

up
2
Dominik
11 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
+Добавить

AltStyle によって変換されたページ (->オリジナル) /