Inilah yang akhirnya saya dapatkan yang berhasil (setelah mencoba tidak berhasil membuat kueri yang saya butuhkan untuk mencapai hal yang sama)...
Array asli $theresults
berisi semua 60 pertanyaan dari 5 kategori yang berbeda. Saya mulai dengan membangun sebuah array dari semua kategori pertanyaan...
// Create array of all categories
$allcategories = array();
$this->db->select('category_id');
$this->db->where('template_id',$template_id);
$query_thecategories = $this->db->get('categories');
$number_thecategories = $query_thecategories->num_rows();
if ($number_thecategories>0) {
foreach ($query_thecategories->result() as $row_thecategory) {
$thecategory = 'cat_' . $row_thecategory->category_id;
$$thecategory = '0';
$allcategories[] = $row_thecategory->category_id;
}
}
Kemudian saya menggunakan fungsi berikut untuk menarik semua kombinasi unik kategori...
function array_search_by_key($array, $key, $value) {
if(!is_array($array)) {
return [];
}
$results = [];
foreach($array as $element) {
if(isset($element[$key]) && $element[$key] == $value) {
$results[] = $element;
}
}
return $results;
}
$uniquecombos = uniquecombos($allcategories, 2);
Terakhir, saya mengulang setiap kombo untuk menarik pertanyaan yang cocok dengan setiap kategori dalam pasangan dan menyimpan hasilnya dalam larik baru. (Saya mengulangnya tiga kali karena setiap pasangan kategori akan digunakan tiga kali (10 kombinasi pasangan pertanyaan x 3 putaran =60 pertanyaan.) Saya juga menghapus setiap pertanyaan yang saya tarik dari $theresults
asli. array untuk memastikan tidak ada duplikat...
// Create an empty array to capture the paired questions
$pairs = array();
// Loop through unique combos array 3 times to build pairings
for($combos = 1; $combos <= 3; $combos++) {
foreach ($uniquecombos as $theset) {
// Get two categories in pair
$firstcategory = $theset[0];
$secondcategory = $theset[1];
// Gather other arrays which matches each category
$matchesfirst = array_search_by_key($theresults,'category_id',$firstcategory);
shuffle($matchesfirst);
$matchessecond = array_search_by_key($theresults,'category_id',$secondcategory);
shuffle($matchessecond);
// Get question from each new array & add; remove selected question from the original array
$pairs[] = $matchesfirst[0];
unset($theresults[$matchesfirst[0]['question_id']]);
$pairs[] = $matchessecond[0];
unset($theresults[$matchessecond[0]['question_id']]);
}
}
Semoga ini bisa membantu orang lain!