• 11-04-2022, 12:03:21
    #1
    Merhaba arkadaşlar,

    3 adet array olduğunu düşünün.

    $beden=array("34","35","36");
    $renk=array("sari","kirmizi","mavi");
    $taksit=array("var","yok");

    Bu 3 arrayin kombinasyonları gerekiyor. Örneğin;

    34-sari-var
    34-sari-yok
    34-kirmizi -var
    34-kirmizi -yok
    34-mavi-var
    34-mavi-yok

    35-sari-var
    35-sari-yok
    35-kirmizi -var
    35-kirmizi -yok
    35-mavi-var
    35-mavi-yok

    36-sari-var
    36-sari-yok
    36-kirmizi -var
    36-kirmizi -yok
    36-mavi-var
    36-mavi-yok

    Bu kombinasyonu oluşturacak fonksiyona ihtiyacım var. Array sayısı ve array içindeki eleman sayısı değişkendir. Mantığı kuramadım. Fikirlerinizi rica ediyorum.
  • 11-04-2022, 12:12:47
    #2
    yine bir array oluşturursun isteklerini tek bir değişkene atarsın sonra değişkeni oluşturduğun array e tanımlarsın.
  • 11-04-2022, 12:22:20
    #3
    3 tane içi içe döngü ile yapabilirsin
    Örnek:
    foreach($beden as $b)
        foreach($renk as $r)
          foreach($taksit as $t)
             echo $b."-".$r."-".$t . "<br>";
  • 11-04-2022, 12:24:58
    #4
    Html ile select yapıp post gönderebilirsiniz
    Php ilede birleştirmek için

    <?php
    function sec($beden, $renk, $taksit) {
    return $beden.'-'. $renk.'-'.$taksit;
    }
    ? >
  • 11-04-2022, 12:55:17
    #5
    Ayni ture indirgemek icin ilk olarak bir for dongusu ile, string array'lerini aldim.
    Daha sonra tmp array'i ile yeni string array'i 2 foreach dongusu ile kombinasyonlarini olusturudum.

    Yani surekli olarak, her arrayi onceki tum array'larin kombinasyonlari ile yeniden kombinliyor.
  • 11-04-2022, 14:37:01
    #6
    salihbey24 adlı üyeden alıntı: mesajı görüntüle
    3 tane içi içe döngü ile yapabilirsin
    Örnek:
    foreach($beden as $b)
        foreach($renk as $r)
          foreach($taksit as $t)
             echo $b."-".$r."-".$t . "<br>";
    Yorumunuz için teşekkürler. array sayısı değişkenlik gösteriyor bunu aşağıdaki gibi bir diziye attığımızı düşünürsek hepsini yazdıracak bir fonksiyona nasıl getirebiliriz.

    $varyant[]=array("34", "35", "36");
    $varyant[]=array("Beyaz", "Kırmızı", "Yeşil");
    $varyant[]=array("Taksitli","Taksitsiz");
    $varyant[]=array("Kargolu","Kargosuz","Kapıda Teslimat");


    foreach($varyant[0] as $a) {
    foreach($varyant[1] as $b) {
    foreach($varyant[2] as $c) {
    foreach($varyant[3] as $d) {
    echo $a.'-'.$b.'-'.$c.'-'.$d.'<br>';
    }
    }
    }
    }
  • 11-04-2022, 14:42:15
    #7
    profweb adlı üyeden alıntı: mesajı görüntüle
    Ayni ture indirgemek icin ilk olarak bir for dongusu ile, string array'lerini aldim.
    Daha sonra tmp array'i ile yeni string array'i 2 foreach dongusu ile kombinasyonlarini olusturudum.

    Yani surekli olarak, her arrayi onceki tum array'larin kombinasyonlari ile yeniden kombinliyor.

    Yorumunuz için teşekkürler. İstediğim recursive bir fonksiyon ama sizin kodlarınızı çalıştıramadım.
  • 11-04-2022, 14:44:36
    #8
    salimsevindik adlı üyeden alıntı: mesajı görüntüle
    Yorumunuz için teşekkürler. İstediğim recursive bir fonksiyon ama sizin kodlarınızı çalıştıramadım.
    Recursive fonksiyon ile de yapılabilir. Açıkçası tam uğraşmadım onun için. Ancak yazdığım fonksiyonu da bire bir alırsanız çalışacaktır. Test ettim.
  • 11-04-2022, 21:37:51
    #9
    @profweb; @salihbey24; ilginiz için teşekkür ederim. Araştırmalarım ve fikirleriniz doğrultusunda istediğim sonuca ulaştım. Çözüm aşağıdadır. Teşekkürler
    Bunu nerede kullanırız diye düşünen arkadaşlar için e-ticaret yazılımlarında ürün varyant stok adetlerini tutmak için kullanacağım.

    $varyant[]=array("34", "35", "36");
    $varyant[]=array("Beyaz", "Kırmızı", "Yeşil");
    $varyant[]=array("Taksitli","Taksitsiz");
    $varyant[]=array("Kargolu","Kargosuz","Kapıda Teslimat");

    function combinations($arrays, $i = 0) {
    if (!isset($arrays[$i])) {
    return array();
    }
    if ($i == count($arrays) - 1) {
    return $arrays[$i];
    }

    $tmp = combinations($arrays, $i + 1);
    $result = array();

    foreach ($arrays[$i] as $v) {
    foreach ($tmp as $t) {
    $result[] = is_array($t) ?
    array_merge(array($v), $t) :
    array($v, $t);
    }
    }
    return $result;
    }

    $sonuc=combinations($varyant);
    foreach($sonuc as $item){
    echo implode("-",$item).'<br>';
    }

    //ÇIKTI
    34-Beyaz-Taksitli-Kargolu
    34-Beyaz-Taksitli-Kargosuz
    34-Beyaz-Taksitli-Kapıda Teslimat
    34-Beyaz-Taksitsiz-Kargolu
    34-Beyaz-Taksitsiz-Kargosuz
    34-Beyaz-Taksitsiz-Kapıda Teslimat
    34-Kırmızı-Taksitli-Kargolu
    34-Kırmızı-Taksitli-Kargosuz
    34-Kırmızı-Taksitli-Kapıda Teslimat
    34-Kırmızı-Taksitsiz-Kargolu
    34-Kırmızı-Taksitsiz-Kargosuz
    34-Kırmızı-Taksitsiz-Kapıda Teslimat
    34-Yeşil-Taksitli-Kargolu
    34-Yeşil-Taksitli-Kargosuz
    34-Yeşil-Taksitli-Kapıda Teslimat
    34-Yeşil-Taksitsiz-Kargolu
    34-Yeşil-Taksitsiz-Kargosuz
    34-Yeşil-Taksitsiz-Kapıda Teslimat
    35-Beyaz-Taksitli-Kargolu
    35-Beyaz-Taksitli-Kargosuz
    35-Beyaz-Taksitli-Kapıda Teslimat
    35-Beyaz-Taksitsiz-Kargolu
    35-Beyaz-Taksitsiz-Kargosuz
    35-Beyaz-Taksitsiz-Kapıda Teslimat
    35-Kırmızı-Taksitli-Kargolu
    35-Kırmızı-Taksitli-Kargosuz
    35-Kırmızı-Taksitli-Kapıda Teslimat
    35-Kırmızı-Taksitsiz-Kargolu
    35-Kırmızı-Taksitsiz-Kargosuz
    35-Kırmızı-Taksitsiz-Kapıda Teslimat
    35-Yeşil-Taksitli-Kargolu
    35-Yeşil-Taksitli-Kargosuz
    35-Yeşil-Taksitli-Kapıda Teslimat
    35-Yeşil-Taksitsiz-Kargolu
    35-Yeşil-Taksitsiz-Kargosuz
    35-Yeşil-Taksitsiz-Kapıda Teslimat
    36-Beyaz-Taksitli-Kargolu
    36-Beyaz-Taksitli-Kargosuz
    36-Beyaz-Taksitli-Kapıda Teslimat
    36-Beyaz-Taksitsiz-Kargolu
    36-Beyaz-Taksitsiz-Kargosuz
    36-Beyaz-Taksitsiz-Kapıda Teslimat
    36-Kırmızı-Taksitli-Kargolu
    36-Kırmızı-Taksitli-Kargosuz
    36-Kırmızı-Taksitli-Kapıda Teslimat
    36-Kırmızı-Taksitsiz-Kargolu
    36-Kırmızı-Taksitsiz-Kargosuz
    36-Kırmızı-Taksitsiz-Kapıda Teslimat
    36-Yeşil-Taksitli-Kargolu
    36-Yeşil-Taksitli-Kargosuz
    36-Yeşil-Taksitli-Kapıda Teslimat
    36-Yeşil-Taksitsiz-Kargolu
    36-Yeşil-Taksitsiz-Kargosuz
    36-Yeşil-Taksitsiz-Kapıda Teslimat