2012-03-08 16 views
0

この関数は、配列の範囲内の項目を見つけてキーを返すことを目的としています。ところで再帰関数:エコーが動作し、戻り値が返されない

function listArray($tb, $target){ 
    foreach($tb as $key => $value){ 
     if(is_array($value)){ // current value is an array to explore 
      $_SESSION['group'] = $key; // saving the key in case this array contains the searched item 
      listArray($value, $target); 
     }else { 
      if ($target == $value) { // current value is the matching item 
       return $_SESSION['group']; //Trying to return its key 
       break; // I'd like to close foreach as I don't need it anymore 
       } 
     } 
    } 
} 

、他の小さい事:

問題は、それが期待される結果をエコーし​​まうのに対し、関数は、何も返さないということです... は、ここに私のコードで私はよ再帰関数には使用されず、セッション変数を使用する以外の方法はありませんでした。しかし、私はこのセッション変数を他の場所で使用しないため、より良いやり方があるかもしれません...

+0

何も起こりませんか?つまり、$ valueが配列ではないが、それも!= $ targetである場合。これは問題の原因かもしれません。 – Ynhockey

+1

関数の目的は何ですか? – Sirko

+0

この関数は、配列の範囲内の項目を見つけてキーを返すことを目的としています。 – Yako

答えて

0

最終的に私の結果を変数$_SESSIONに保存することで、この問題を回避しました。

あなたが設定した条件のいずれも満たされていないときに、もう何return ...

$_SESSION['item'][$target] = $_SESSION['group']; 
2

listArrayコールの前にreturnが必要です。 breakに達することはありませんされていること、それについて

感謝..

return; 
break; 

(私はとにかく、PHPで関数を終了するにはbreakを使用することができます信じていません)

return戻り再帰からコール。のは、この2つの別々の機能はなかったと言ってみましょう:

function foon() { 
    barn(); 
} 
function barn() { 
    return true; 
} 

foonにはreturn文を持っていません。

+0

私は他の試行を貼り付けませんでした。 そのうちの1人は、「foreach」の外で「戻ってくる」ことでした。これはあなたが意味することですか? – Yako

+0

あなたは*できます*あなたは 'listArray'関数の結果を変数に格納しなければなりません。実際には、あなたの関数を少し変更する必要があります。なぜなら、間違った値が後で来たら、正しい 'listArray'結果を上書きしたくないからです(私はあなたがブレークでそれをしようとしていると思います)。 –

+0

OK、結果を変数に保存しました。しかし、私はどこに返すべきか分かりません。関数の最後には機能しません... if(isset($ result)){return $ result;} ' – Yako

関連する問題