RecursiveArrayIterator::hasChildren()
(PHP 5 >= 5.1.0, PHP 7)
Returns whether current entry is an array or an object
说明
public RecursiveArrayIterator::hasChildren( void) : bool
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.
范例
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
参见
- 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