2016-08-10 12 views
2

私がやっていることをする良い方法があるのか​​どうか不思議です。私はかなり新しいPHPですので、他の人が誰と思っているのか、もっと多くの時間を言語に費やしたことに興味があります。私が何をしたいか配列内のすべてのオブジェクトで関数を呼び出す最も良い方法は? forループなし?

array_map(function($object) { $object->loadEvents(); }, $patients); 

をこれは結構です、それは動作します:私はやっているアレイ内のすべてのオブジェクトに対するコール機能

。私が求めているのはなぜ私はまた、ループため

を使用することができます。を私も持っていないときのループのために使用していないために慣れてきたので、私はarray_mapをを使用する方法を考え出しました。問題は、私が見るところでは、人々はarray_mapを使って結果を新しい配列にマッピングしているようです。私は基本的にの配列のマップの機能を望んでいますが、戻り値はありません。

良い方法がありますか?これとforループの外に? forループはより良い方法ですか?

+0

なぜあなたはループを恐れていますか?最後に 'array_map()'は内部ループを使用して配列値を調べます。また、 'array_walk()'を見たいかもしれません。 – Rizier123

+0

'foreach'は通常の方法です。 – Barmar

+0

@ Rizier123が示唆しているように、 'array_walk()'は新しい配列を構築しない 'array_map()'のバージョンです。 – Barmar

答えて

3

PHPで配列をループする通常のイディオムは、foreachという演算子です。 array_walkarray_mapを使用することはできますが、比較的新しいバージョンのPHPが匿名関数を作成するまでは不便でしたので、共通の慣用表現にはなりませんでした。 PHP 5.3より前には、その場で関数を作成するためにcreate_function()に電話しなければなりませんでした。したがって、array_walkarray_mapは、通常、名前付き関数が必要な場合にのみ使用されます。

$array = array_map('trim', $array); 

しかし、たとえ今は無名関数を作成するためにfunctionを使用することができ、多くの人々が

foreach ($array as $xx) { 
    ... 
} 

array_mapより

array_walk($array, function($x) { 
    ... 
}); 

読みにくく、それがあるため、複数array_walkを使用する傾向見つけますより大きな表現の一部として使用することができます。 foreachを使用すると、1つのループを使用して結果配列にプッシュし、その配列を操作するコードを続ける必要があります。

+0

これは実際に私にとっては機能しませんでした。なぜなら、loadEvents関数を使ってインスタンスを変更しているからです。どうやらリファレンスとarray_walkに問題があるようです。このため多くのforループが一番簡単です。私は助けに感謝します。 –

+0

私はオブジェクトと 'array_walk'に何か問題があるはずはないと思います。私は 'array_walk'の引数を逆に返していましたが、それはおそらく問題でしたか? – Barmar

+0

ああ、それは問題だった!ありがとう、完璧に動作します! –

0

ループを使用すると何が問題になりますか?それがその目的のために設計されたものです。

foreach ($patients as $patient) { 
    $patient->loadEvents(); 
} 

シンプルで誰にでも明らか。同じ仕事を達成するために冗長なコードを書いている点は、「クール」か、誰もがやっているように思えるからです。

私は必要ないときにforループを使用しないことに慣れてきたので、array_mapを使用する方法を考え出しました。

ループを使用しないことをあなた自身が設定した任意の規則のために、array_map()を間違って使用していますか?

+1

...素晴らしい可読性を持っています – Katie

+1

これは単なるコメントのようです。私はそれに同意しますが、あなたは基本的にこの質問を無視し、 'array_walk'の明白な答えを放棄しました。 – nerdlyist

+0

私は何も使っていません。 forループで問題が発生すると、誰も言いませんでした。 質問は知識を得るよう求められました。 –

関連する問題