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.
Php ile dizi kombinasyonu
9
●274
- 11-04-2022, 12:03:21
- 11-04-2022, 12:22:203 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:55:17Ayni 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:01Yorumunuz 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.salihbey24 adlı üyeden alıntı: mesajı görüntüle
$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:15profweb 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. - 11-04-2022, 14:44:36Recursive 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.salimsevindik adlı üyeden alıntı: mesajı görüntüle
- 11-04-2022, 21:37:51@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
