0

私には機能があります

function GetArrKey( $findArr, $key_arr, $depth=0 )
{
  if( count($key_arr) <= $depth || !array_key_exists($key_arr[$depth], $findArr) )
    return NULL;
  else if( count($key_arr) == $depth+1 )
    return $findArr[$key_arr[$depth]];

  return self::GetArrKey( $findArr[$key_arr[$depth]], $key_arr, $depth+1 );
}

これは配列を検索し、必要なものに一致する配列の一部を返します。

唯一の問題は、まったく同じ値を返しているように見えることです。たとえば、私は foreach ループにこの関数を持っています

foreach($e as $k => $v) {
  $value = GetArrayKey(array,$k);
  print_r($value);
}

そして、まったく同じ値を5回出力しています(ただし、検索に使用している $k は毎回異なります)。

self::GetArrKey が返されたためだと思いますが、修正できないようです。

例...

tweet-19486731414564564
Tweet 1
tweet-19486778435455556
Tweet 1
tweet-19703966855465458
Tweet 1
tweet-19842914654654650
Tweet 1

しかし、それはすべきです

tweet-19486731414564564
Tweet 1
tweet-19486778435455556
Tweet 2
tweet-19703966855465458
Tweet 3
tweet-19842914654654650
Tweet 4
4

1 に答える 1

0

私はあなたの問題があなたの再帰関数の最後の行にあると信じています:

return self::GetArrKey( $findArr[$key_arr[$depth]], $key_arr, $depth+1 );

これは、ベースケースに到達するまで、関数が再度呼び出されることを意味します。基本ケースが返され、この関数はそのケースを変更しません。したがって、再帰関数へのすべての呼び出しは、基本ケースの結果のみを返します。これは、一部の関数を再帰的に実行するのではなく、応答を探しているため、この場合は必要ありません。

于 2012-06-11T19:36:09.690 に答える