php - 在 PHP 递归函数内部返回
问题描述
我正在编写一个 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_icon
值的数组t_link
。条件是如果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);
。但它也不起作用。谢谢你。
解决方案
因为你在函数内部调用了一个函数,所以你必须返回函数的值,这里是修复:(在 test($data); 之前添加了“return”)
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(isset($data["Overview"])) {
return test($data);
}
}
}
此外,所有这三种情况,它们都排列,因此return test($data);
将停止 foreach 然后$menu["Accounts"]["Overview"]
永远不会被检查。
推荐阅读
- azure-functions - 如何在启动类中使用 Azure Function 中的中间件
- react-native - Detect Scrollview 在 react native 中达到底部的 50%
- python - 为什么 TensorFlow 无法在这里制作渐变?
- javascript - 限制 React useEffect 中显示的结果
- google-cloud-platform - 如何使用 PyCharm 通过 IAP 隧道远程访问虚拟机
- reactjs - 握手后 Websocket 立即断开连接(鳄梨酱)
- c++ - 一个特定调用的 c++ 堆栈对齐
- node.js - 在 GCP VM 上的 NGINX 反向代理上配置 SSL
- python-3.x - 尝试用 Python 理解 asyncio
- javascript - 有没有办法用 Cypress 一致地单击 DevExtreme 元素?