sql >> Databáze >  >> RDS >> Mysql

Jak znovu sestavit pole bez opakování a dalších omezení?

Tady je to, s čím jsem nakonec přišel, že to fungovalo (po neúspěšném pokusu o vytvoření dotazu, který jsem potřeboval, abych dosáhl toho samého)...

Původní pole $theresults obsahuje všech 60 otázek z 5 různých kategorií. Začnu tím, že vytvořím pole všech kategorií otázek...

// 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;
    }
}

Poté pomocí následující funkce vytáhnu všechny jedinečné kombinace 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);

Nakonec procházím každé z komb, abych vytáhl otázky, které odpovídají každé kategorii v páru, a uložím výsledek do nového pole. (Opakuji to třikrát, protože každé párování kategorií bude použito třikrát (10 kombinací dvojic otázek x 3 smyčky =60 otázek.) Také odstraním každou otázku, kterou vytáhnu z původního $theresults pole, abyste se ujistili, že neexistují žádné duplikáty...

// 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']]);
    }
}

Snad to pomůže někomu dalšímu!




  1. Jak používat AI pro ladění SQL pro skutečný automatizovaný proces

  2. Jak mohu použít klauzuli LIKE v příkazu připraveném pro CHOP?

  3. Nahrání wordového dokumentu, jeho uložení na mysql a jeho zobrazení

  4. Hibernate nevytváří tabulku v databázi