我有一个非常愚蠢的问题,但我正在看半个小时的代码,无法弄清楚如何解决它。
我正在研究一些更复杂的迭代器,但我会在这个简单的例子上显示问题:
public function test($obj = null)
{
$test = array(
'Level 1 A' => array(
'Level 2 A' => 1,
'Level 2 B' => array(
'Level 3 A' => 2,
'Level 4 B' => 3,
)
),
'Level 1 B' => array(
'Level 2 C' => 4
)
);
if ($obj) {
$test = $obj;
}
foreach ($test as $key => $value) {
var_dump($key);
if (is_array($value)) {
return $this->test($value);
}
}
return $value;
}
问题是此函数不输出Level 1 B
和子元素。
我知道这是一个非常新手的问题,但我需要一个有新面貌的人。
答案 0 :(得分:0)
foreach循环中的return语句在遇到第一个数组()之后将结束递归,因此不会处理第二个数组。
答案 1 :(得分:0)
看起来你需要递归generator。
此函数将在您的数据结构中移动并返回它遇到的所有值:
function iterate($data) {
foreach ($data as $key => $value) {
if (is_array($value)) {
yield from iterate($value);
}
else {
yield $value;
}
}
}
你可以像这样使用它:
foreach (iterate($test) as $value) {
// do something with $value
}