Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bagaimana cara membangun kembali array tanpa pengulangan &batasan lainnya?

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!




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sistem Peringkat di PHP dan MySQL

  2. MySQL:Bagaimana cara menghindari pengguna untuk melihat saya memiliki DB lain dan memberikan akses pilih ke satu tampilan pada satu DB?

  3. Perlindungan Injeksi SQL - tanda kutip tunggal

  4. ID kenaikan otomatis MySQL tiba-tiba melonjak ke MAXINT, apa alasannya?

  5. Mengakses Database MySql dari file PHP di host lokal