PHP Conference Japan 2024

RecursiveArrayIterator::hasChildren

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

RecursiveArrayIterator::hasChildren傳回目前項目是否為陣列或物件

說明

public RecursiveArrayIterator::hasChildren(): bool

傳回目前項目是否為可透過 RecursiveArrayIterator::getChildren() 取得迭代器的 陣列物件

參數

此函式沒有參數。

傳回值

如果目前項目是 陣列物件,則傳回 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 則註記

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