随机化对象数组的一部分

时间:2018-12-13 07:03:42

标签: php sorting random

我有一个对象数组。首先我将其改组。我想基于两个键对数组进行排序

"questions": [
    {
      "id_question": "35",
      "id_subject": "63",
      "id_question_pattern": "1",
      "correct_marks": "1",
      "in_correct_marks": "0",
      "partial_marks": "0",
      "id_question_interpretation": "1",
      "id_comprehension": "0",
      "is_approved": "13",
      "question_image": "",
      "solution_image": "",
      "subject_name": "subject 1",
      "id_sub_subject": "112",
      "sub_subject_name": "Sub Subject 2",
      "id_topic": "212",
      "topic_name": "Sub subject 2 topic 1",
      "id_sub_topic": "31",
      "sub_topic_name": "subject 1 sub topic 2 Q3",
      "id_question_source": "3",
      "question_source_name": "Dakshana intimal\t",
      "id_difficult_level": "4",
      "difficulty_name": "Difficult",
      "quesion_pattern_name": "Single Correct Option Type ",
      "id_status": "0",
      "status_name": "Active",
      "last_review_date": "2018-10-31 11:05:14",
      "id_review_requirement": "2",
      "id_time_for_question": "2",
      "answer": "",
      "is_answered": "1",
      "is_visited": "1",
      "mark_for_review": "1",
      "is_not_answered": "1",
      "id_selected_option": "",
      "single_correct_option": "",
      "number_of_visted": "0",
      "spend_time": "0",
      "multiple_correct_option": "",
      "matxi_answer": "",
      "id_subject_section": "",
      "sequence_number": 1
    },
    {
      "id_question": "11",
      "id_subject": "6",
      "id_question_pattern": "1",
      "correct_marks": "2",
      "in_correct_marks": "1",
      "partial_marks": "0",
      "id_question_interpretation": "1",
      "id_comprehension": "0",
      "is_approved": "13",
      "question_image": "",
      "solution_image": "",
      "subject_name": "Mathematics",
      "id_sub_subject": "5",
      "sub_subject_name": "Algebra",
      "id_topic": "31",
      "topic_name": "Mathematical Induction",
      "id_sub_topic": "44",
      "sub_topic_name": "Mathematical induction 1",
      "id_question_source": "3",
      "question_source_name": "Dakshana intimal\t",
      "id_difficult_level": "3",
      "difficulty_name": "Medium",
      "quesion_pattern_name": "Single Correct Option Type ",
      "id_status": "0",
      "status_name": "Active",
      "last_review_date": "2018-10-24 16:20:13",
      "id_review_requirement": "1",
      "id_time_for_question": "3",
      "answer": "",
      "is_answered": "1",
      "is_visited": "1",
      "mark_for_review": "1",
      "is_not_answered": "1",
      "id_selected_option": "",
      "single_correct_option": "",
      "number_of_visted": "0",
      "spend_time": "0",
      "multiple_correct_option": "",
      "matxi_answer": "",
      "id_subject_section": "",
      "sequence_number": 2
    },
    {
      "id_question": "25",
      "id_subject": "4",
      "id_question_pattern": "1",
      "correct_marks": "2",
      "in_correct_marks": "0",
      "partial_marks": "0",
      "id_question_interpretation": "2",
      "id_comprehension": "0",
      "is_approved": "13",
      "question_image": "",
      "solution_image": "",
      "subject_name": "Chemistry",
      "id_sub_subject": "1",
      "sub_subject_name": "Optics",
      "id_topic": "1",
      "topic_name": "Thermo dynamics",
      "id_sub_topic": "46",
      "sub_topic_name": "sub topic thermodyn chemistry",
      "id_question_source": "3",
      "question_source_name": "Dakshana intimal\t",
      "id_difficult_level": "1",
      "difficulty_name": "Very Easy",
      "quesion_pattern_name": "Single Correct Option Type ",
      "id_status": "0",
      "status_name": "Active",
      "last_review_date": "2018-10-26 12:05:28",
      "id_review_requirement": "1",
      "id_time_for_question": "1",
      "answer": "",
      "is_answered": "1",
      "is_visited": "1",
      "mark_for_review": "1",
      "is_not_answered": "1",
      "id_selected_option": "",
      "single_correct_option": "",
      "number_of_visted": "0",
      "spend_time": "0",
      "multiple_correct_option": "",
      "matxi_answer": "",
      "id_subject_section": "",
      "sequence_number": 3
    },
    {
      "id_question": "6",
      "id_subject": "4",
      "id_question_pattern": "1",
      "correct_marks": "2",
      "in_correct_marks": "0",
      "partial_marks": "0",
      "id_question_interpretation": "2",
      "id_comprehension": "0",
      "is_approved": "13",
      "question_image": "",
      "solution_image": "",
      "subject_name": "Chemistry",
      "id_sub_subject": "1",
      "sub_subject_name": "Optics",
      "id_topic": "1",
      "topic_name": "Thermo dynamics",
      "id_sub_topic": "46",
      "sub_topic_name": "sub topic thermodyn chemistry",
      "id_question_source": "3",
      "question_source_name": "Dakshana intimal\t",
      "id_difficult_level": "2",
      "difficulty_name": "Easy",
      "quesion_pattern_name": "Single Correct Option Type ",
      "id_status": "0",
      "status_name": "Active",
      "last_review_date": "2018-10-24 16:15:48",
      "id_review_requirement": "1",
      "id_time_for_question": "2",
      "answer": "",
      "is_answered": "1",
      "is_visited": "1",
      "mark_for_review": "1",
      "is_not_answered": "1",
      "id_selected_option": "",
      "single_correct_option": "",
      "number_of_visted": "0",
      "spend_time": "0",
      "multiple_correct_option": "",
      "matxi_answer": "",
      "id_subject_section": "",
      "sequence_number": 4
    }       

  ]

我想每次将id_question更改为in_subject

foreach ($questions_array as $key => $row){
 $subject_sort[$key] = $row['id_subject'];
 $question_pattern_sort[$key] = $row['id_question_pattern'];
} 

array_multisort($question_pattern_sort, SORT_ASC, $subject_sort, SORT_ASC, $questions_array);

2 个答案:

答案 0 :(得分:1)

如果我正确理解了您的问题,您可以做的是遍历数组并为数组的每个元素设置id_question = id_subject

像这样:

foreach($questions_array['questions'] as $key=>$value){

  $questions_array['questions'][$key]['id_question'] = $questions_array['questions'][$key]['id_subject'];  

}

答案 1 :(得分:0)

要按id_subject然后按id_question_pattern进行排序,我可以推荐两种方法之一(取决于您的php版本)。

具有usort():(Demo)的太空飞船运营商

usort($array["questions"], 
      function($a, $b){
          return [$a['id_subject'], $a['id_question_pattern']] <=> [$b['id_subject'], $b['id_question_pattern']];
      }
);

或带有array_multisort()Demo

array_multisort(array_column($array["questions"], "id_subject"), SORT_ASC, array_column($array["questions"], "id_question_pattern"), SORT_ASC, $array["questions"]);

请务必意识到您要在questions子数组中进行排序。