kombinasyonları: Birden fazla iç içe foreach kaçınarak

4 Cevap php

Eğer dizi elemanlarının kombinasyonları var / kontrol etmek gerektiğinde, nasıl iç içe foreach önleyebilirsiniz?

Örnek kod:

$as = array($optionA1, $optionA2)
$bs = array($optionB1, $optionB2)
$cs = array($optionC1, $optionC2)

foreach ($as as $a) {
    foreach ($bs as $b) {
      foreach ($cs as $c) {
          $result = $this->method($a, $b, $c);
          if ($result) etc
      }
    }
}

Yuvalama önleyebilirsiniz alternatif yaklaşımlar ile herkes?

4 Cevap

Sen Iterator interface uygulayan kendi Iterator sınıf yazabilirsiniz. Daha sonra yapıcı üç diziler kabul ve sonra foreach ile her kombinasyonu üzerinde döngü için kullanabilirsiniz olabilir.

Ancak bu önemli ölçüde yavaş olacağını düşünüyorum, bu yüzden bunu önlemek. Bu iç içe foreach döngüleri önlemek istiyor nedenleri bilmek ilginç olurdu?

Her dizinin sayımı sürüyor ve permütasyon toplam sayısını almak için bir araya hepsini çarparak, ve ben bu saymak yinelemek için daha sonra bir yapıyor düşündünüz mü? Her dizi için bazı komik sayaç manipülasyon yapmak gerekir, ama çalışması gerekir.

Gerçekten alternatif ne olduğunu bilmek için yeterli bilgi verilmiş değil. Eğer gerçekten $ bs ve $ cs, gibi $ gelen tüm seçenekleri kombinasyonları ile yöntemi () aramak istiyorsanız, o zaman iç içe döngüler doğru olanı yapacağız.

Bu sizi rahatsız çarpma iç içe döngüler, ya da yöntemi () denir ediliyor sayısı * sayısı ($ bs) * sayısı ($ cs) kez ($ olarak)? Gerçektir

Mantıken, bir şekilde her madde aracılığıyla yinelemek zorunda. Sadece süreci etrafında üreticimizin ediyoruz.

Döngüler için birden çok çirkin bakarsanız, belki kendi kapsüllü 'çek' olan kendi sınıfları, içine diziler koymak gerekir.