2017-05-15 18 views
0

参照パラメータ付きの再帰関数があります。ユーザーが現在のノードを見ることができるかどうかを調べる、ナビゲーションを通過します。しかし、サブノード($nodeItem['nodes'])に行くと、そのインスタンス内で正常に動作しますが、arrayが返されません。それが問題です。サブノードにアクセスするべきではない場合、インスタンス内でそれらをアンセットしますが、配列を返してメインナビゲーションノードの配列に戻ったとき、すべてのサブノードが戻ります。何が間違っている可能性がありますか?参照付きPHP再帰関数

private function getNodesByRole(&$nodesArray) 
{ 
    foreach ($nodesArray as $nodeKey => $nodeItem) { 
     $link = trim($nodeItem['href'], self::SEPARATOR_PRESENTER_LINK); 

     if (substr_count($link, self::SEPARATOR_PRESENTER_LINK) == 2) { 
      $resource = substr($link, 0, strrpos($link, self::SEPARATOR_PRESENTER_LINK)); 
      $privilege = substr($link, strrpos($link, self::SEPARATOR_PRESENTER_LINK) + 1); 

      if ($this->user->isAllowed($resource, $privilege) === false) { 
       unset($nodesArray[$nodeKey]); 
       dump($nodeItem); 
       dump($nodesArray); 
      } else if (!empty($nodeItem['nodes'])) { 
       $this->getNodesByRole($nodeItem['nodes']); 
      } 

     } else { 
      if (!empty($nodeItem['nodes'])) { 
       $this->getNodesByRole($nodeItem['nodes']); 
      } 
     } 

     if (isset($nodeItem['nodes']) && count($nodeItem['nodes']) == 0) { 
      unset($nodesArray[$nodeKey]); 
      continue; 
     } 
    } 
    return $nodesArray; 
} 

答えて

1

は、あなたはそれが役に立てば幸いこの

private function getNodesByRole(&$nodesArray) 
{ 
foreach ($nodesArray as $nodeKey => $nodeItem) { 
    $link = trim($nodeItem['href'], self::SEPARATOR_PRESENTER_LINK); 

    if (substr_count($link, self::SEPARATOR_PRESENTER_LINK) == 2) { 
     $resource = substr($link, 0, strrpos($link, self::SEPARATOR_PRESENTER_LINK)); 
     $privilege = substr($link, strrpos($link, self::SEPARATOR_PRESENTER_LINK) + 1); 

     if ($this->user->isAllowed($resource, $privilege) === false) { 
      unset($nodesArray[$nodeKey]); 
      dump($nodeItem); 
      dump($nodesArray); 
     } else if (!empty($nodeItem['nodes'])) { 
      $nodesArray = $this->getNodesByRole($nodeItem['nodes']); 
     } 

    } else { 
     if (!empty($nodeItem['nodes'])) { 
      $nodesArray = $this->getNodesByRole($nodeItem['nodes']); 
     } 
    } 

    if (isset($nodeItem['nodes']) && count($nodeItem['nodes']) == 0) { 
     unset($nodesArray[$nodeKey]); 
     continue; 
    } 
} 
return $nodesArray; 
} 

のように、現在の状態配列に返された配列を設定する必要があります!

+0

私はちょうど編集しなければならなかった、その戻り値は '$ nodesArray'ではなく' $ nodesArray [$ nodesKey] ['nodes'] 'に保存されています。 – HS1993