2012-01-17 6 views
0

配列内の要素を(その要素の位置を含む別の配列の助けを借りて)見つけ出す関数/クラスメソッドが必要であり、その参照を返します。配列への参照を受け入れ、配列を検索し、検索結果への参照を返す関数です。

私はそうのようにそれを行うにしようとしました無駄に:

$var = array("foo" => array("bar" => array("bla" => "goal"))); 

$location = array("foo", "bar", "bla"); 

... 

$ref =& $this->locate($var, $location); 

... 

private function &locate(&$var, $location) { 

    if(count($location)) 

     $this->locate($var[array_shift($location)], $location); 

    else 

     return $var; 

} 

上記の機能が正常にゴール」を見つけたが、参照は$ refに返却されていない、代わりに$ refは空です。

ご協力いただきまして誠にありがとうございます。ありがとうございました。

答えて

0

あなたは最初の呼び出しに再帰スタックに結果の上を通過する必要があります。

private function &locate(&$var, $location) { 
    if(count($location)) { 
     $refIndex= array_shift($location); 
     return $this->locate($var[$refIndex], $location); 
    } else { 
     return $var; 
    } 
} 

そして、私は、再帰呼び出しの前にarray_shift呼び出しを行うだろう。ご存知のように、私は、呼び出し内でパラメータが変更される関数呼び出しでは不安です。

+0

引数は関数呼び出しの前に評価されるため、引数が変異式である(実際には副作用がある)ときには問題になりません。 – outis

+0

ありがとう、私はそれを完全に見落とした。私はあなたの借金にいる! – Ozonic

関連する問題