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 每次都不同)。

我假设这是因为 return 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 回答