RecursiveArrayIterator::hasChildren

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

RecursiveArrayIterator::hasChildren返回当前条目是否为数组或对象

说明

public RecursiveArrayIterator::hasChildren(): bool

返回当前条目是否为 arrayobject,可以通过 RecursiveArrayIterator::getChildren() 获取其迭代器。

参数

此函数没有参数。

返回值

如果当前条目是 arrayobject,则返回 true,否则返回 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();
}
?>

以上示例将输出

No children.
No children.
a : apple
p : pear

参见

添加笔记

用户贡献笔记 1 笔记

Dominik
9 年前
hasChildren() 的工作方式与这里记录的一致,但与它的名称不同。

该方法不会返回当前条目是否实际上 *有* 子节点。它只返回元素的类型是否能够有子节点。

如果您正在处理空数组,这有点违反直觉。

示例

<?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) 有子节点\n";
} else {
echo
"$depth: $key ($type) 没有子节点\n";
}
}
?>

结果

0: element one (array) 有子节点
1: 0 (boolean) 没有子节点
0: element two (array) 有子节点
0: element three (array) 有子节点
1: 0 (boolean) 没有子节点
To Top