Scribble at 2023-08-18 19:26:21 Last modified: unmodified
最近は PHP でも OOP なりクロージャを使った複雑な組み合わせの処理を書いたりするのだけれど、オンラインで掲載されているコードの実例は、ヒントになるのかもしれないが、たいていはそのまま書いても全く動かない。特に、クロージャを使った再帰的な処理の場合は、コピペするだけでは全く動かないので、そういうコードをまともに動かすためのバッド・ノウハウに時間をとられてしまうという時間の浪費が多い。
先日も紹介したが、たとえば複数の配列から要素を一つずつ取り出して全ての組み合わせを作ろうとすると、最もスタンダードなやりかたでは array_walk などを使って再帰的な処理をするが、これをオンラインで公開されているコードをコピペして動かそうとしても、多くの場合に "Stack trace: #0 {main} thrown in ..." のようなエラーが出てしまう。あるいは、自分の動かしている環境とかスコープの中だけで動いているにすぎないユーザ定義関数をそのまま掲載している人もいて、そういう人はたいてい何にも考えずに "self::" のようなクラスを前提にしたコードを書いていたりする。
再帰的なルーチン(コールバック関数や array_walk のような関数)を使わずに済ませるなら、やはりスタンダードなドキュメントを読むのが最も手っ取り早いし信頼性も高い。この場合だと、PHP の公式サイトでちゃんと Cartesian product の関数が紹介されているので、それを上記のように使えばいいだけである。