【发布时间】:2010-12-07 00:24:00
【问题描述】:
我有一个包含其他对象的 PHP 对象
即
$obj->sec_obj->some_var;
我想使用 foreach 循环遍历对象和所有对象对象。我认为最高等级是3,所以
$obj->sec_obj->third_obj->fourth_obj
有什么想法吗?
【问题讨论】:
我有一个包含其他对象的 PHP 对象
即
$obj->sec_obj->some_var;
我想使用 foreach 循环遍历对象和所有对象对象。我认为最高等级是3,所以
$obj->sec_obj->third_obj->fourth_obj
有什么想法吗?
【问题讨论】:
为 slikts 解决方案添加了对数组的支持
function loop($obj, $path = [])
{
$parent = $path;
if (is_object($obj)) {
foreach ($obj as $key => $value) {
loop($value, array_merge($parent, [$key]));
}
} elseif (is_array($obj)) {
foreach ($obj as $index => $value) {
loop($value, array_merge($parent, [$index]));
}
} else {
echo join('.', $path) . ": $obj" . PHP_EOL;
}
}
例子:
$o = (object) [
"name" => "sample document",
"items" => [
(object) [
"type" => "text",
"placeholder" => "type it"
]
]
];
loop($o);
输出:
name: sample document
items.0.type: text
items.0.placeholder: type it
【讨论】:
这只是基本的递归。
function loop($obj)
{
if (is_object($obj)) {
foreach ($obj as $x) {
loop($x);
}
} else {
// do something
}
}
编辑:打印键值对:
function loop($obj, $key = null)
{
if (is_object($obj)) {
foreach ($obj as $x => $value) {
loop($value, $x);
}
} else {
echo "Key: $key, value: $obj";
}
}
【讨论】:
【讨论】:
查看此页面:http://www.php.net/manual/en/language.oop5.iterations.php
您可以使用foreach 循环访问对象的公共成员,因此您可以使用递归函数来实现。
如果你想更花哨一点,你可以使用迭代器。
【讨论】: