【发布时间】:2020-09-05 21:29:22
【问题描述】:
我正在编写一个 PHP 递归函数来使用它们的值从数组中获取数据。所以这是我正在尝试构建的功能:
function test($menu) {
$url = "test.com/accounts/overview/";
foreach($menu as $data) {
if( is_array($data) and array_key_exists("t_link", $data) and $data["t_link"] === $url ) {
return $data["t_icon"];
} else if(is_array($data)) {
test($data);
}
}
}
echo test($menu);
第一个条件仅在我的数组中一次为真,return 必须返回值并终止函数,不是吗?但为什么它注意到回报?另外,如果我使用echo $data["t_icon"]; 而不是return $data["t_icon"];,它会显示正确的结果:fa fa-book。
这是我试图根据t_link 值获取t_icon 值的数组。条件是如果t_link 值具有test.com/accounts/overview/,那么它将返回fa fa-book
$menu = array ();
$menu["Dashboard"] = array (
"t_link" => "test.com",
"t_icon" => "fa fa-dashboard"
);
$menu["Accounts"] = array (
"t_link" => "test.com/accounts",
"t_icon" => "fa fa-books"
);
$menu["Accounts"]["Overview"] = array (
"t_link" => "test.com/accounts/overview/",
"t_icon" => "fa fa-book" <<-- This value I want to get
);
我搜索了很多并得到了这个,我应该在第二个条件中返回函数,就像这样return test($data);。但它也不起作用。谢谢。
【问题讨论】:
-
没有返回它运行函数但不返回任何东西。你想返回一个结果。您可能还有其他错误,请尝试使用调试器或添加日志记录。
-
旁注:递归很酷。真的。特别是对于编译器。然而,函数调用在 php 中非常慢,并且循环要快得多 - 即使在 C 中也是如此。更不用说内存需求和嵌套函数限制(不太糟糕)。因此,除非你真的必须解决它的递归问题,否则最好使用结构良好的数组。
-
谢谢@DavidHlavati先生,其实它是一个菜单数组。
-
@DaveS,其他错误?可以举个例子吗?
-
@bestprogrammerintheworld,如果不使用递归就可以得到期望值。我想要基于
t_link值的t_icon值。