2014-04-15 53 views
0

下面我有一個多維數組。我試圖根據傳入函數的值來獲取數組的某個部分。但由於某些原因,即使path匹配,它也會返回錯誤,但只有在使用/test時才返回某些內容,但如果輸入/hello,則if將失敗,並返回false獲取多維數組的一部分php

這裏是數組:

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; 
     } 
    } 
} 
+2

'if'是否通過?你檢查了嗎? – Linek

+0

@Linek它每次都返回false。唯一不是的,如果我發送'/測試'它發現一個,但不是其他。 – zachstarnes

+0

你確定'$ this-> routes'包含'/ hello'路徑嗎? – Linek

回答

2

您提供的代碼只是修改,可能是你應該嘗試這樣的事:

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

你改變了什麼? – Mike

+0

已經將'return false'移出'for for循環。 – Uours

+1

啊,知道了。這絕對看起來像是正確的答案。 – Mike

0

檢查第一個元素後,您的方法就存在了。刪除else塊,並將循環外的返回值設爲false。

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

    return false; 
0

我不知道爲什麼/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; 
} 
+0

該代碼無嵌套的foreach循環。謝謝! – zachstarnes