sql >> データベース >  >> RDS >> Mysql

リピートやその他の制限なしでアレイを再構築するにはどうすればよいですか?

    これが私が最終的に思いついたものです(同じことを達成するために必要なクエリの構築に失敗した後)...

    元の配列$theresults 5つの異なるカテゴリからの60の質問すべてが含まれています。まず、すべての質問カテゴリの配列を作成します...

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

    最後に、各コンボをループして、ペアの各カテゴリに一致する質問を取得し、結果を新しい配列に格納します。 (各カテゴリのペアが3回使用されるため、3回ループします(質問ペアの10の組み合わせx3ループ=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. djangoを使用して外部データベースからテンプレートにデータをプルする

    2. 2つの日付の間で欠落している日付範囲と重複する日付範囲を計算します

    3. MySQLテーブルから配列を作成する

    4. SQLServerの日付から短い月の名前を取得する5つの方法