Php 获取多维数组的一部分

Php 获取多维数组的一部分,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,下面是一个多维数组。我试图根据传入函数的值获取数组的某些部分。但出于某种原因,即使路径匹配,它也会返回false,仅当使用了/test时,它才会返回内容,但如果我键入/hello,则如果失败,它会返回false 以下是阵列: Array ( [0] => Array ( [name] => test_route [path] => /test [controller] => T

下面是一个多维数组。我试图根据传入函数的值获取数组的某些部分。但出于某种原因,即使路径匹配,它也会返回false,仅当使用了
/test
时,它才会返回内容,但如果我键入
/hello
,则
如果失败,它会返回
false

以下是阵列:

Array
(
    [0] => Array
        (
            [name] => test_route
            [path] => /test
            [controller] => TestController
            [action] => indexAction
        )

    [1] => Array
        (
            [name] => hello_route
            [path] => /hello
            [controller] => HelloController
            [action] => helloAction
        )

)
方法如下:

public function getRoute($path = "", $name = "")
{
    foreach($this->routes as $key => $val)
    {
        if($val['path'] === $path || $val['name'] === $name)
        {
            return $this->routes[$key];
        }
        else
        {
            return false;
        }
    }
}

仅修改您提供的代码,可能您应该尝试以下操作:

public function getRoute($path = "", $name = "")
{
    foreach($this->routes as $key => $val)
    {
        if($val['path'] === $path || $val['name'] === $name)
        {
            return $this->routes[$key];
        }
    }
    return false;
}

您的方法在检查第一个元素后存在。移除else块并将返回false置于循环之外

foreach($this->routes as $key => $val)
    {
        if($val['path'] === $path || $val['name'] === $name)
        {
            return $this->routes[$key];
        }
    }

    return false;

我不知道为什么
/test
甚至可以工作。您正在处理一个多维数组。foreach不进行深度搜索。您必须将代码修改为:

public function getRoute($path = "", $name = "")
{
   foreach($this->routes as $route) { 
        foreach($route as $key => $val)
        {
            if($val['path'] === $path || $val['name'] === $name)
          {
              return $route[$key];
          }

        }
    }
    return false;
}

是否通过?你检查过了吗?@Linek每次都返回false。唯一一次不是这样的是,如果我发送
/test
,它会发现一个而不是另一个。你确定
$this->routes
包含
/hello
路径吗?试着在codepad.org这样的网站上发布一个最小的示例。@Linek是的,上面的多维数组是
打印($this->routes)的结果已将
返回false
移出
for
循环。啊,明白了。这看起来绝对是正确的答案。@Uours感谢您解决了这个问题。然而,尽管不需要使用2个foreach循环,但您认为这是一个好主意吗?就像迈克尔金斯的回答一样?或者这只适用于3层的阵列,迈克尔·金的答案适用于3维阵列。您的数据数组是二维的,您的代码是用于二维数组的。考虑到这已经对您有效,我看不出任何问题。代码在没有嵌套的foreach循环的情况下工作。谢谢