2011-12-16 21 views
0

私は些細な問題のように見えるものを完全に困惑しています。php関数は空の文字列を返します。 echoは文字列を正しく出力します。

私はこの機能を持っている:それは何も返さないだ理由

function findCategoryNameInTree($id, $tree) { 
    foreach($tree as $branch) { 
     if ($branch['category_id'] == $id) { 
      echo $branch['name'];//works 
      print_r($branch['name']);//works 
      //return($branch['name']); //returns nothing 
      return $branch['name'];//fix this line per feedback still no return value 
     } else { 
      if(count($branch['children']) > 0) { 
       findCategoryNameInTree($id,$branch['children']); 
      } 
     } 

    } 
} 

は、私は私の人生のために把握することはできません。

助けてください!

編集 は、ここで私はちょうど丸括弧を削除し、それが動作するはず

//what I really want to do 
$primgenre = findCategoryNameInTree($cat_id,$category_tree['children']); 

//but this doesnt work either 
echo $primgenre; 

//nor this 
print_r($pringenre); 
+3

あなたは私達にあなたの 'findCategoryNameInTree'関数を呼び出して、どのようにそれがあるコードの一部を示しませんでした関数の戻り値が関数の戻り値の解釈ではなく、間違っていると判断したとします。 –

答えて

1

あなたはこのために返すのを忘れ: -

findCategoryNameInTree($id,$branch['children']); 

の変更: -

return findCategoryNameInTree($id,$branch['children']); 
+0

信じられないほど、私はそれを逃したと信じられない。どうもありがとうございます!私のコードは括弧付きでもなくても動作します。 -3それはすべての。 – KTastrophy

+0

-1を取得したい場合は、このような質問をしてください。 +1を得るには、あなたの質問は理解できるものでなければなりません。 – ajreal

+0

私の質問が不明であることに気付かなかった。もう一度見て、私は実際に何かを尋ねなかったと思う。先端に感謝します。あまりにも多くの急いで私は推測する。 – KTastrophy

0

私の関数を呼び出す方法です!

return $branch['name']; 

マイナスしてくれてありがとう;)

あなたの関数は

出力何かを

$test = findCategoryNameInTree(XY, "bla"); 
echo $test; 
をすべき呼び出して、あなたが言う点までのように動作している場合。

+0

それは本当に問題ではありません – matino

+0

あなたが参照で戻ったときに重要なので、常にそれを放置するのが最善です。 – Maerlyn

+1

参照:http://php.net/manual/en/function.return.php – diEcho

0

はこれを試してみてください:

function findCategoryNameInTree($id, $tree) { 
foreach($tree as $branch) { 
    if ($branch['category_id'] == $id) { 
     x = $branch['name']; 
    } else { 
     if(count($branch['children']) > 0) { 
      findCategoryNameInTree($id,$branch['children']); 
     } 
    } 

} 
return x; 

}

+1

'foreach'ループ内で' return'を行うことはできません。実際には、希望の値を返すためにループが終了するのを待つ必要がないので、ループ内に置く方がよいでしょう。 –

+0

私はコードをテストして、foreachの中断をして戻ってくるような、私が想像することができるすべてのものを使って私のために働きます。 – djot

1

hereは明らかに、配列を返すとき、あなたは他に、 リターンの前に配列を宣言する必要があり、結果はあなたのようではありません

を述べました期待する;

も を参照して戻ったときに、これは動作しませんようあなたは、あなたの戻り変数の周りに括弧を使用しないでくださいNOTE

を参照してください。変数 は参照のみで返すことができ、ステートメントの結果は返しません。

ここ
foreach($tree as $branch) { } 

$branch$treeのアレイのちょうど内部ポインタ(参照として仮定)です。

+0

配列$ branch ['name ']は文字列です。また、私はかっこを削除し、私はまだ空の戻り値を取得しています。 – KTastrophy

0

これは私にとっても、また$ my_resultの方法でもうまくいきます!

<?php 

$tree = ARRAY(); 
$tree[0] = ARRAY('category_id'=>10, 'name'=>'ten', 'children'=>''); 
$tree[1] = ARRAY('category_id'=>11, 'name'=>'eleven', 'children'=>''); 
$tree[2] = ARRAY('category_id'=>12, 'name'=>'twelve', 'children'=>''); 


function findCategoryNameInTree($id, $tree) { 
    //$my_result = 'none'; 
    foreach($tree as $branch) { 
    if ($branch['category_id'] === $id) { 
     //echo $branch['name'];//works 
     //print_r($branch['name']);//works 
     //$my_result = $branch['name']; 
     //break; 
     return $branch['name']; //returns nothing 
    } 
    //else { 
    // if(count($branch['children']) > 0) { 
    // findCategoryNameInTree($id,$branch['children']); 
    // } 
    //} 
    } 
    //return $my_result; 
} 

echo findCategoryNameInTree(10, $tree).'<br />'; 
echo findCategoryNameInTree(11, $tree).'<br />'; 
echo findCategoryNameInTree(12, $tree).'<br />'; 

?> 
0

この方法を試してみてください(あるべき)

$primgenre = findCategoryNameInTree($cat_id,$category_tree); 

$ブランチは(あるべき)配列なので、$ツリーがあります。 $ tree配列に整形された$ブランチ配列が含まれていれば、すべて正常に動作するはずです。私の他の解決策を$ tree配列の例で見てください。

関連する問題