Halo, kali ini saya akan membagikan sebuah metode untuk menghasilkan semua kombinasi item pada beberapa array menggunakan PHP. Pada matematika ini biasa dibuat dengan diagram pohon peluang pada himpunan.

Untuk lebih memahami maksud dari artikel ini mari kita langsung masuk ke contoh studi kasus. Contohnya kita mempunyai 3 kelompok himpunan yang dalam php kita artikan sebagai array, yaitu :

$arrayA = array('Rendah', 'Tinggi');
$arrayB = array('Baik', 'Buruk');
$arrayC = array('Sakit', 'Sehat');

Maka kita bisa menghasilkan 8 jenis kemungkinan yaitu dengan rumus 2x2x2 = 8 kemungkinan, atau dengan mengalikan jumlah item masing-masing array. Kemungkinan / kombinasi dari contoh di atas adalah :

// Hasilnya adalah
1 => Rendah, Baik, Sakit
2 => Rendah, Baik, Sehat
3 => Rendah, Buruk, Sakit
4 => Rendah, Buruk, Sehat
5 => Tinggi, Baik, Sakit
6 => Tinggi, Baik, Sehat
7 => Tinggi, Buruk, Sakit
8 => Tinggi, Buruk, Sehat

Sekarang bagaimana cara menghasilkan semua kombinasi tersebut menggunakan PHP? cukup menggunakan fungsi di bawah ini :

// fungsi untuk menghasilkan kombinasi
function getCombinations(...$arrays) {
	$result = [[]];
	foreach ($arrays as $property => $property_values) {
		$temp = [];
		foreach ($result as $result_item) {
			foreach ($property_values as $property_value) {
				$temp[] = array_merge($result_item, [$property => $property_value]);
			}
		}
		$result = $temp;
	}
	return $result;
}

Penggunaannya menggunakan contoh di atas adalah :

$arrayA = array('Rendah', 'Tinggi');
$arrayB = array('Baik', 'Buruk');
$arrayC = array('Sakit', 'Sehat');

$hasil = getCombinations($arrayA, $arrayB, $arrayC);

var_dump($hasil);

Dari sana maka akan dihasilkan berupa array kombinasi dari fungsi tersebut :

C:\xampp\htdocs\examples\combinations.php:23:
array (size=8)
  0 => 
    array (size=3)
      0 => string 'Rendah' (length=6)
      1 => string 'Baik' (length=4)
      2 => string 'Sakit' (length=5)
  1 => 
    array (size=3)
      0 => string 'Rendah' (length=6)
      1 => string 'Baik' (length=4)
      2 => string 'Sehat' (length=5)
  2 => 
    array (size=3)
      0 => string 'Rendah' (length=6)
      1 => string 'Buruk' (length=5)
      2 => string 'Sakit' (length=5)
  3 => 
    array (size=3)
      0 => string 'Rendah' (length=6)
      1 => string 'Buruk' (length=5)
      2 => string 'Sehat' (length=5)
  4 => 
    array (size=3)
      0 => string 'Tinggi' (length=6)
      1 => string 'Baik' (length=4)
      2 => string 'Sakit' (length=5)
  5 => 
    array (size=3)
      0 => string 'Tinggi' (length=6)
      1 => string 'Baik' (length=4)
      2 => string 'Sehat' (length=5)
  6 => 
    array (size=3)
      0 => string 'Tinggi' (length=6)
      1 => string 'Buruk' (length=5)
      2 => string 'Sakit' (length=5)
  7 => 
    array (size=3)
      0 => string 'Tinggi' (length=6)
      1 => string 'Buruk' (length=5)
      2 => string 'Sehat' (length=5)

Dari sana sudah terlihat bahwa terdapat 8 buah array hasil dari kombinasi yang diinginkan, hasilnya juga masih berupa array, yang mana bisa kita olah menjadi apapun, contoh jika ingin dijadikan text / string, maka tambahkan kode berikut di bawahnya :

foreach ($hasil as $c) {
	$text = implode(", ", $c);
	echo $text . '<br/>';
}

Maka dari sana akan dihasilkan 8 baris text / kalimat hasil penggabungan dari array tersebut :

Berikut kodingan lengkapnya :

<?php
function getCombinations(...$arrays) {
	$result = [[]];
	foreach ($arrays as $property => $property_values) {
		$temp = [];
		foreach ($result as $result_item) {
			foreach ($property_values as $property_value) {
				$temp[] = array_merge($result_item, [$property => $property_value]);
			}
		}
		$result = $temp;
	}
	return $result;
}

$arrayA = array('Rendah', 'Tinggi');
$arrayB = array('Baik', 'Buruk');
$arrayC = array('Sakit', 'Sehat');

$hasil = getCombinations($arrayA, $arrayB, $arrayC);

foreach ($hasil as $c) {
	$text = implode(", ", $c);
	echo $text . '<br/>';
}

Sekian tutorialnya, silahkan dipakai dan dimodifikasi sesuai dengan kubutuhan, jika ada yang ingin ditanyakan silahkan tingalkan komentar di bawah. Jika dirasa artikel ini bermanfaat jangan lupa untuk di share juga.

Keep Calm and Stay Ngoding.