【问题标题】:randomise part of an object array随机化对象数组的一部分
【发布时间】:2018-12-13 07:03:42
【问题描述】:

我有一个对象数组。首先我对其进行洗牌。我想根据两个键对数组进行排序

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

【问题讨论】:

  • 请尽量减少您的问题,只包含相关的样本数据。您的问题将与每个子数组中的识别元素和几个随机元素一样清楚。在每个子数组中列出数十个元素是纯粹的页面膨胀,使您的问题不那么有吸引力。然后你应该包含你想要的排序后输出,以便清楚你当前的代码是如何不工作的以及你希望实现什么。

标签: php sorting random


【解决方案1】:

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

像这样:

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

  $questions_array['questions'][$key]['id_question'] = $questions_array['questions'][$key]['id_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);我这样做,但每次都会给我相同的 id_question
  • 请用您当前的代码更新您的问题。注释区不适用于代码块。
【解决方案2】:

要按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 子数组中进行排序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-27
    • 1970-01-01
    • 1970-01-01
    • 2017-08-01
    • 1970-01-01
    • 2013-06-18
    • 2019-01-31
    相关资源
    最近更新 更多