PHP Conference Japan 2024

RecursiveArrayIterator::getChildren

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

RecursiveArrayIterator::getChildren如果目前項目是 陣列物件,則傳回該項目的迭代器

說明

public RecursiveArrayIterator::getChildren(): ?RecursiveArrayIterator

傳回目前迭代器項目的迭代器。

參數

此函式沒有參數。

回傳值

若目前的項目是一個 陣列物件,則會回傳目前項目的迭代器;若失敗則回傳 null

錯誤/例外

如果目前的項目不包含 陣列物件,則會拋出 InvalidArgumentException

範例

範例 #1 RecursiveArrayIterator::getChildren() 範例

<?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 則註解

3
814ckf0x
10 年前
RecursiveArrayIterator::getChildren() 回傳的是子項目的副本,而不是參考。
<?php
$stack
= array ("some" => "value",
array (
"subsome" => "subvalue", array ("subsubsome" => "subsubvalue")),
"some1" => "value1");

$object = new RecursiveArrayIterator ($stack);
$object->next ();
$second_object = &$object->getChildren ();

$second_object->next ();

$third_object = &$second_object->getChildren ();

$third_object->offsetSet ("subsubsome", "subsubdiferent");

var_dump ($object);
var_dump ($second_object);
var_dump ($third_object);
?>
回傳值

object(RecursiveArrayIterator)#1 (1) {
["storage":"ArrayIterator":private]=>
array(3) {
["some"]=>
string(5) "value"
[0]=>
array(2) {
["subsome"]=>
string(8) "subvalue"
[0]=>
array(1) {
["subsubsome"]=>
string(11) "subsubvalue" <--- 預期會被更改
}
}
["some1"]=>
string(6) "value1"
}
}
object(RecursiveArrayIterator)#2 (1) {
["storage":"ArrayIterator":private]=>
array(2) {
["subsome"]=>
string(8) "subvalue"
[0]=>
array(1) {
["subsubsome"]=>
string(11) "subsubvalue" <--- 預期會被更改
}
}
}
object(RecursiveArrayIterator)#3 (1) {
["storage":"ArrayIterator":private]=>
array(1) {
["subsubsome"]=>
string(14) "subsubdiferent"
}
}
To Top