所以,我有点麻烦: 我有一个类,我们将其命名为“Menu”,同样,我有一个数组,它为“菜单”提供了一个元素,它看起来像那样
class Menu {
private $_data = [];
public function __construct() {
$this->_data = array(
"Parent1" => array(
"Child1" => array(
"id" => 1,
"minQuantity" => x,
"maxQuantity" => x,
"cost" => x,
),
"Child2"...
),
"ParentX" => array(
"ChildXX"...
)
/* AND SO ON */
);
}
}
另外,在“菜单”中我有一个函数,通过递归尝试找到具有指定值的$ this-> _data的元素,函数看起来像:
public function findChildById($parent = null, $id = null) {
foreach ($parent as $_parent => $_child) {
if (array_key_exists($id, $parent)) var_dump($parent);
if (is_array($_child)) $this->findChildById($_child, $id);
}
}
但是,当它找到所需元素时,我尝试返回它 - 结果总是为NULL。使用var_dump导致明显的输出,我可以看到我需要什么,但我无法从函数返回一个元素。我该怎么办?
答案 0 :(得分:1)
由于您只尝试查找一个元素,因此将返回值传递给递归堆栈应该足够了。例如。像这样:
public function findChildById($parent = null, $id = null) {
foreach ($parent as $_parent => $_child) {
if (array_key_exists($id, $parent)) return $parent; //first return
if (is_array($_child)) {
$tmp = $this->findChildById($_child, $id);
if (!is_null($tmp)) return $tmp; //if a deeper step found sth. pass it up
}
}
}
你得到NULL的原因必须是,因为当代码没有到达return语句时,PHP函数会隐式返回NULL。