首页 > 解决方案 > 在 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);。但它也不起作用。谢谢你。

标签: phprecursion

解决方案


因为你在函数内部调用了一个函数,所以你必须返回函数的值,这里是修复:(在 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"]永远不会被检查。


推荐阅读