I solve exactly the same problem you're trying to with the below method (cartesian product)
There's a few implementations around the net, I'd be surprised if there isn't one for PHP. Julian Doherty wrote: > So you basically want a cartesian product of an arbitrary list of lists? > > The Ruby facets gem does > that: > http://facets.rubyforge.org/git?p=facets.git;a=blob;f=lib/core/facets/array/product.rb;h=f890ddc0ddd7e7f5076f207d0cc126b7bf34ceea;hb=HEAD > > Heres what the Ruby code looks like (works for an arbitrary number of > list arguments): > > class Array > 2 > <http://facets.rubyforge.org/git?p=facets.git;a=blob;f=lib/core/facets/array/product.rb;h=f890ddc0ddd7e7f5076f207d0cc126b7bf34ceea;hb=HEAD#l2> > > > 3 > <http://facets.rubyforge.org/git?p=facets.git;a=blob;f=lib/core/facets/array/product.rb;h=f890ddc0ddd7e7f5076f207d0cc126b7bf34ceea;hb=HEAD#l3> > > if RUBY_VERSION < '1.9' > 4 > <http://facets.rubyforge.org/git?p=facets.git;a=blob;f=lib/core/facets/array/product.rb;h=f890ddc0ddd7e7f5076f207d0cc126b7bf34ceea;hb=HEAD#l4> > > > 5 > <http://facets.rubyforge.org/git?p=facets.git;a=blob;f=lib/core/facets/array/product.rb;h=f890ddc0ddd7e7f5076f207d0cc126b7bf34ceea;hb=HEAD#l5> > > # Provides the cartesian product of two or more arrays. > 6 > <http://facets.rubyforge.org/git?p=facets.git;a=blob;f=lib/core/facets/array/product.rb;h=f890ddc0ddd7e7f5076f207d0cc126b7bf34ceea;hb=HEAD#l6> > > # > 7 > <http://facets.rubyforge.org/git?p=facets.git;a=blob;f=lib/core/facets/array/product.rb;h=f890ddc0ddd7e7f5076f207d0cc126b7bf34ceea;hb=HEAD#l7> > > # a = [] > 8 > <http://facets.rubyforge.org/git?p=facets.git;a=blob;f=lib/core/facets/array/product.rb;h=f890ddc0ddd7e7f5076f207d0cc126b7bf34ceea;hb=HEAD#l8> > > # [1,2].product([4,5]) > 9 > <http://facets.rubyforge.org/git?p=facets.git;a=blob;f=lib/core/facets/array/product.rb;h=f890ddc0ddd7e7f5076f207d0cc126b7bf34ceea;hb=HEAD#l9> > > # a #=> [[1, 4],[1, 5],[2, 4],[2, 5]] > 10 > <http://facets.rubyforge.org/git?p=facets.git;a=blob;f=lib/core/facets/array/product.rb;h=f890ddc0ddd7e7f5076f207d0cc126b7bf34ceea;hb=HEAD#l10> > > # > 11 > <http://facets.rubyforge.org/git?p=facets.git;a=blob;f=lib/core/facets/array/product.rb;h=f890ddc0ddd7e7f5076f207d0cc126b7bf34ceea;hb=HEAD#l11> > > # CREDIT: Thomas Hafner > 12 > <http://facets.rubyforge.org/git?p=facets.git;a=blob;f=lib/core/facets/array/product.rb;h=f890ddc0ddd7e7f5076f207d0cc126b7bf34ceea;hb=HEAD#l12> > > > 13 > <http://facets.rubyforge.org/git?p=facets.git;a=blob;f=lib/core/facets/array/product.rb;h=f890ddc0ddd7e7f5076f207d0cc126b7bf34ceea;hb=HEAD#l13> > > def product(*enums) > 14 > <http://facets.rubyforge.org/git?p=facets.git;a=blob;f=lib/core/facets/array/product.rb;h=f890ddc0ddd7e7f5076f207d0cc126b7bf34ceea;hb=HEAD#l14> > > enums.unshift self > 15 > <http://facets.rubyforge.org/git?p=facets.git;a=blob;f=lib/core/facets/array/product.rb;h=f890ddc0ddd7e7f5076f207d0cc126b7bf34ceea;hb=HEAD#l15> > > result = [[]] > 16 > <http://facets.rubyforge.org/git?p=facets.git;a=blob;f=lib/core/facets/array/product.rb;h=f890ddc0ddd7e7f5076f207d0cc126b7bf34ceea;hb=HEAD#l16> > > while [] != enums > 17 > <http://facets.rubyforge.org/git?p=facets.git;a=blob;f=lib/core/facets/array/product.rb;h=f890ddc0ddd7e7f5076f207d0cc126b7bf34ceea;hb=HEAD#l17> > > t, result = result, [] > 18 > <http://facets.rubyforge.org/git?p=facets.git;a=blob;f=lib/core/facets/array/product.rb;h=f890ddc0ddd7e7f5076f207d0cc126b7bf34ceea;hb=HEAD#l18> > > b, *enums = enums > 19 > <http://facets.rubyforge.org/git?p=facets.git;a=blob;f=lib/core/facets/array/product.rb;h=f890ddc0ddd7e7f5076f207d0cc126b7bf34ceea;hb=HEAD#l19> > > t.each do |a| > 20 > <http://facets.rubyforge.org/git?p=facets.git;a=blob;f=lib/core/facets/array/product.rb;h=f890ddc0ddd7e7f5076f207d0cc126b7bf34ceea;hb=HEAD#l20> > > b.each do |n| > 21 > <http://facets.rubyforge.org/git?p=facets.git;a=blob;f=lib/core/facets/array/product.rb;h=f890ddc0ddd7e7f5076f207d0cc126b7bf34ceea;hb=HEAD#l21> > > result << a + [n] > 22 > <http://facets.rubyforge.org/git?p=facets.git;a=blob;f=lib/core/facets/array/product.rb;h=f890ddc0ddd7e7f5076f207d0cc126b7bf34ceea;hb=HEAD#l22> > > end > 23 > <http://facets.rubyforge.org/git?p=facets.git;a=blob;f=lib/core/facets/array/product.rb;h=f890ddc0ddd7e7f5076f207d0cc126b7bf34ceea;hb=HEAD#l23> > > end > 24 > <http://facets.rubyforge.org/git?p=facets.git;a=blob;f=lib/core/facets/array/product.rb;h=f890ddc0ddd7e7f5076f207d0cc126b7bf34ceea;hb=HEAD#l24> > > end > 25 > <http://facets.rubyforge.org/git?p=facets.git;a=blob;f=lib/core/facets/array/product.rb;h=f890ddc0ddd7e7f5076f207d0cc126b7bf34ceea;hb=HEAD#l25> > > result > 26 > <http://facets.rubyforge.org/git?p=facets.git;a=blob;f=lib/core/facets/array/product.rb;h=f890ddc0ddd7e7f5076f207d0cc126b7bf34ceea;hb=HEAD#l26> > > end > 27 > <http://facets.rubyforge.org/git?p=facets.git;a=blob;f=lib/core/facets/array/product.rb;h=f890ddc0ddd7e7f5076f207d0cc126b7bf34ceea;hb=HEAD#l27> > > > 28 > <http://facets.rubyforge.org/git?p=facets.git;a=blob;f=lib/core/facets/array/product.rb;h=f890ddc0ddd7e7f5076f207d0cc126b7bf34ceea;hb=HEAD#l28> > > end > 29 > <http://facets.rubyforge.org/git?p=facets.git;a=blob;f=lib/core/facets/array/product.rb;h=f890ddc0ddd7e7f5076f207d0cc126b7bf34ceea;hb=HEAD#l29> > > > 30 > <http://facets.rubyforge.org/git?p=facets.git;a=blob;f=lib/core/facets/array/product.rb;h=f890ddc0ddd7e7f5076f207d0cc126b7bf34ceea;hb=HEAD#l30> > > # Operator alias for cross-product. > 31 > <http://facets.rubyforge.org/git?p=facets.git;a=blob;f=lib/core/facets/array/product.rb;h=f890ddc0ddd7e7f5076f207d0cc126b7bf34ceea;hb=HEAD#l31> > > # > 32 > <http://facets.rubyforge.org/git?p=facets.git;a=blob;f=lib/core/facets/array/product.rb;h=f890ddc0ddd7e7f5076f207d0cc126b7bf34ceea;hb=HEAD#l32> > > # a = [1,2] ** [4,5] > 33 > <http://facets.rubyforge.org/git?p=facets.git;a=blob;f=lib/core/facets/array/product.rb;h=f890ddc0ddd7e7f5076f207d0cc126b7bf34ceea;hb=HEAD#l33> > > # a #=> [[1, 4],[1, 5],[2, 4],[2, 5]] > 34 > <http://facets.rubyforge.org/git?p=facets.git;a=blob;f=lib/core/facets/array/product.rb;h=f890ddc0ddd7e7f5076f207d0cc126b7bf34ceea;hb=HEAD#l34> > > # > 35 > <http://facets.rubyforge.org/git?p=facets.git;a=blob;f=lib/core/facets/array/product.rb;h=f890ddc0ddd7e7f5076f207d0cc126b7bf34ceea;hb=HEAD#l35> > > # CREDIT: Trans > 36 > <http://facets.rubyforge.org/git?p=facets.git;a=blob;f=lib/core/facets/array/product.rb;h=f890ddc0ddd7e7f5076f207d0cc126b7bf34ceea;hb=HEAD#l36> > > > 37 > <http://facets.rubyforge.org/git?p=facets.git;a=blob;f=lib/core/facets/array/product.rb;h=f890ddc0ddd7e7f5076f207d0cc126b7bf34ceea;hb=HEAD#l37> > > alias_method :**, :product > 38 > <http://facets.rubyforge.org/git?p=facets.git;a=blob;f=lib/core/facets/array/product.rb;h=f890ddc0ddd7e7f5076f207d0cc126b7bf34ceea;hb=HEAD#l38> > > > 39 > <http://facets.rubyforge.org/git?p=facets.git;a=blob;f=lib/core/facets/array/product.rb;h=f890ddc0ddd7e7f5076f207d0cc126b7bf34ceea;hb=HEAD#l39> > > end > > I'm guessing that wouldn't be too hard to port to PHP > > Cheers > Julian Doherty > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby or Rails Oceania" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/rails-oceania?hl=en -~----------~----~----~----~------~----~------~--~---
