Her er, hvad jeg endelig fandt på, der virkede (efter at have forsøgt uden held at bygge den forespørgsel, jeg havde brug for for at opnå det samme)...
Det originale array $theresults
indeholder alle 60 spørgsmål fra de 5 forskellige kategorier. Jeg begynder med at bygge en række af alle spørgsmålskategorierne...
// 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;
}
}
Så bruger jeg følgende funktion til at trække alle de unikke kombinationer af kategorier...
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);
Til sidst går jeg gennem hver af kombinationerne for at trække spørgsmål, der matcher hver kategori i parret, og gemmer resultatet i et nyt array. (Jeg sløjfer det tre gange, fordi hver kategoriparring vil blive brugt tre gange (10 kombinationer af spørgsmålspar x 3 sløjfer =60 spørgsmål). Jeg fjerner også hvert spørgsmål, jeg trækker fra de originale $theresults
array for at sikre, at der ikke er nogen dubletter...
// 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']]);
}
}
Forhåbentlig hjælper dette en anden!