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