2016-10-27 5 views
0

私は、この(私はそれを簡略化してきた)のようなものに見えるいくつかのコードがあります:私は最後の行は、ループが戻ってきたものをエコーすることを期待しリターン結果(S)

function process_something($a){ 
    foreach($a as $b){ 
     // Some logic here 
     return $something; 
    } 
} 
$input=[]; // An array of some kind 
echo process_something($input); 

を私に何も得ない。多分上記のコードは動作しません。私は説明のためにそれを入れました。私は、さまざまなものを返すために一緒に働く多くのネストされたループを持っています。

ループがエコーデータを出力しても動作します。しかし、私は、ユーザーにエコーアウトするのではなく、最後の結果を私の次の処理のために返すだけで、この関数が必要です。

どうすればいいですか?

+0

'return'を呼び出すときに、関数が終了...それはreturn' –

+0

'の性質であるあなたは、このループを知っている:発電機の


詳細一度だけするのだろうか?最初のループで彼は機能からの復帰を得るでしょう。 –

+0

実際の例を掲載できますか?達成しようとしていることを理解することがはるかに簡単になります。 –

答えて

1

このループは、returnが最初に発生した関数から飛び出すため、1回だけ実行されます。それは、より多くのようにする必要があり

:あなたのコードを投稿してください

function process_something($a){ 
    foreach($a as $b){ 
     $something = 'Some math or other logic here'; 
    } 
    return $something; 
} 
$input=[]; // An array of some kind 
echo process_something($input); 

、我々は間違っているかを把握しようとします。

+0

これは私の答えです。私が本当に複雑になるのでコードを投稿する必要はありません。コードを読みやすくするためには、一連のループと関数(データを返す)として保存したいと思っていましたが、これはうまくいく可能性があります。あるいは、ループ外に保存された別の変数を更新する関数を得ることができます。 – DaveHolt

+1

私は助けることができてうれしいです。それがあなたの必要に合っていれば私の答えを受け入れてください:)あなたはより多くの質問があれば、ただ質問する;)ありがとう! –

0

私は正しくあなたを得ました。しかし、私はあなたが配列の最後の値を探していると思います。

function process_something($a){ 
    $b = array_reverse ($a); 
    return $b[0]; 
} 
+0

いいえ、それはそうではありませんが、 'array_reverse'の頭に感謝します! – DaveHolt

1

これはgeneratorのための完璧な場合、私はめったに使わ見られない概念です:ちょうどそれを行うことを行うには 。

function process_something($a){ 
    foreach($a as $b){ 
     // Some logic here 
     yield $something; 
    } 
    } 

    $input=[]; // An array of some kind 

    /** 
    * The generator returns an Iterator instance 
    * so you'd need to loop over it 
    */ 
    foreach(process_something($input) as $item){ 
    // do stuff here 
    // echo $item 
    // echo $item->something 
    // your call 
    } 

ここでの主な利点は、「実際に戻ることなく」返すことができることです。値を生成するとジェネレータはその作業を続けます。

メモリの効率が非常に高いことは言うまでもありませんが、メモリーの99%は問題ではありません。

の項目のうちごとに特定のロジックを適用すると、奇妙なハッキング機能が不要です。


代替

function process_something($a){ 
    $return = []; 

    foreach($a as $b){ 
     // Some logic here 
     $return[] = $something; 
    } 

    return $return; 
    } 

この答えはコメントではない唯一の理由は、それが私が合法的に発電機の恩恵を受けるの質問を参照することは非常に稀であるということです。これはその一つです。

http://blog.ircmaxell.com/2012/07/what-generators-can-do-for-you.html

https://scotch.io/tutorials/understanding-php-generators

+0

Karolは私にとって問題を解決したが、これは良い答えであり、私が「収率」について全く知らなかったので、私が調べる必要があるものだと思う。 – DaveHolt

+1

PHP 5.6(私は思う)からかなり新しくなっています。これはPHPの新機能です。他のプログラミング言語ではジェネレータを定期的に使用しています。D – Andrew

+0

正直言ってこれを使うには私のコードの一部を変更する必要があります。現時点では、私はKarolの答えを受け入れました。私のプロジェクトでは前進していますが、すべてをきれいにする必要がある場合、このアプローチを将来的に使う価値があります。私が始める前に私が知りたがっているアプローチです! – DaveHolt

関連する問題