Ето какво най-накрая измислих и проработи (след неуспешен опит да изградя заявката, която ми трябваше, за да постигна същото)...
Оригиналният масив $theresults
съдържа всички 60 въпроса от 5 различни категории. Започвам с изграждането на масив от всички категории въпроси...
// 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;
}
}
След това използвам следната функция, за да изтегля всички уникални комбинации от категории...
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);
И накрая, преминавам през всяка от комбинациите, за да изтегля въпроси, които съответстват на всяка категория в двойката, и съхранявам резултата в нов масив. (Аз го повтарям три пъти, защото всяка двойка от категории ще се използва три пъти (10 комбинации от двойки въпроси x 3 цикъла =60 въпроса.) Също така премахвам всеки въпрос, който изтегля от оригиналния $theresults
масив, за да се гарантира, че няма дубликати...
// 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']]);
}
}
Надяваме се, че това ще помогне на някой друг!