Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да възстановя масив без повторения и други ограничения?

Ето какво най-накрая измислих и проработи (след неуспешен опит да изградя заявката, която ми трябваше, за да постигна същото)...

Оригиналният масив $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']]);
    }
}

Надяваме се, че това ще помогне на някой друг!




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. колко типа съединения има в mysql или sql

  2. Django AWS RDS MySQL Грешка:(2026, „Грешка при SSL връзката:грешка:00000001:lib(0):func(0):причина(1)“)

  3. Урок за MySQL Workbench – Изчерпателно ръководство за инструмента RDBMS

  4. mysql база данни автоматично разделяне

  5. Външни ключове, когато каскадите не са необходими