PHP में फॉरवर्ड/फोरैच लूप में किसी सरणी से वर्तमान तत्व को कैसे निकालना है?

मैं PHP में जटिल arrays के लिए एक नौसिखिया हूँ। मेरे पास $ प्रश्न नामक एक सहयोगी सरणी है (आपके संदर्भ के लिए मैं इस सहयोगी सरणी के केवल पहले पांच तत्वों को प्रिंट कर रहा हूं, वास्तविक सरणी बहुत बड़ी है):

Array
(
    [0] => Array
        (
            [question_id] => 24264
            [question_parent_id] => 0
            [question_subject_id] => 20
            [question_topic_id] => 544
            [question_directions] => 
            [question_text] => Which of the following is the consequence of plant diseases?
            [question_file] => 
            [question_description] => 
            [question_difficulty_type] => 1
            [question_has_sub_ques] => 0
            [question_picked_individually] => no
            [question_appeared_count] => 0
            [question_manual] => 0
            [question_site_id] => 
            [question_created_staff_id] => e516459cde6a92869a887cb99a911cd6
            [question_added_date] => 1326866014
            [question_updated_staff_id] => 
            [question_updated_date] => 0
        )

    [1] => Array
        (
            [question_id] => 24269
            [question_parent_id] => 0
            [question_subject_id] => 20
            [question_topic_id] => 544
            [question_directions] => 
            [question_text] => Viruses enter into their host through
            [question_file] => 
            [question_description] => 
            [question_difficulty_type] => 1
            [question_has_sub_ques] => 0
            [question_picked_individually] => no
            [question_appeared_count] => 0
            [question_manual] => 0
            [question_site_id] => 
            [question_created_staff_id] => e516459cde6a92869a887cb99a911cd6
            [question_added_date] => 1326866089
            [question_updated_staff_id] => 
            [question_updated_date] => 0
        )

    [2] => Array
        (
            [question_id] => 24274
            [question_parent_id] => 0
            [question_subject_id] => 20
            [question_topic_id] => 544
            [question_directions] => 
            [question_text] => which of the following category of plant diseases cannot be controlled by chemical treatment ?
            [question_file] => 
            [question_description] => 
            [question_difficulty_type] => 1
            [question_has_sub_ques] => 0
            [question_picked_individually] => no
            [question_appeared_count] => 0
            [question_manual] => 0
            [question_site_id] => 
            [question_created_staff_id] => e516459cde6a92869a887cb99a911cd6
            [question_added_date] => 1326866169
            [question_updated_staff_id] => 
            [question_updated_date] => 0
        )

    [3] => Array
        (
            [question_id] => 24279
            [question_parent_id] => 0
            [question_subject_id] => 20
            [question_topic_id] => 544
            [question_directions] => 
            [question_text] => Plants can be made disease resistant through
            [question_file] => 
            [question_description] => 
            [question_difficulty_type] => 1
            [question_has_sub_ques] => 0
            [question_picked_individually] => no
            [question_appeared_count] => 0
            [question_manual] => 0
            [question_site_id] => 
            [question_created_staff_id] => e516459cde6a92869a887cb99a911cd6
            [question_added_date] => 1326866226
            [question_updated_staff_id] => 
            [question_updated_date] => 0
        )

    [4] => Array
        (
            [question_id] => 24282
            [question_parent_id] => 0
            [question_subject_id] => 20
            [question_topic_id] => 544
            [question_directions] => 
            [question_text] => Potato famine of Ireland occured in
            [question_file] => 
            [question_description] => 
            [question_difficulty_type] => 1
            [question_has_sub_ques] => 0
            [question_picked_individually] => no
            [question_appeared_count] => 0
            [question_manual] => 0
            [question_site_id] => 
            [question_created_staff_id] => e516459cde6a92869a887cb99a911cd6
            [question_added_date] => 1326866259
            [question_updated_staff_id] => 
            [question_updated_date] => 0
        )
)

अब मैं प्रत्येक प्रश्न के ['question_text'] कुंजी के मूल्य की तुलना किसी अन्य प्रश्न के ['question_text'] कुंजी के मान के साथ तुलना करना चाहता हूं। मैंने इसके लिए निम्नलिखित कोड लिखा है लेकिन इसमें निम्नलिखित निम्न दोष हैं:

  1. तुलना के दौरान सवाल स्वयं ही तुलना कर रहा है जो नहीं किया जाना चाहिए।

मेरा कोड निम्नानुसार है:

function GetSimilarQuestionsBySubjectIdTopicId($subject_id, $topic_id) {

            $sql  = " SELECT * FROM ".TBL_QUESTIONS." WHERE question_subject_id=".$subject_id;
            $sql .= " AND question_topic_id=".$topic_id;

            $this->mDb->Query($sql);
            $questions_data = $this->mDb->FetchArray();
            $questions      = $questions_data;

            $exclude_words = array('the','at','is','are','when','whom');
foreach($questions as $index=>$arr) {
        $questions_array = explode(' ',$arr['question_text']);
        $clean_questions = array_diff($questions_array, $exclude_words);
        $questions[$index]['question_text'] = implode(' ',$clean_questions );
      }
foreach ($questions as $index=>$outer_data) {

        $outer_data['similar_questions_ids'] = Array();
        $outer_question = $outer_data['question_text'];

        foreach ($questions as $inner_data) {

          $inner_question = $inner_data['question_text'];  

            $same_chars = similar_text($outer_question, $inner_question, $percent);
            $percentage = number_format((float)$percent, 2, '.', '');

            if($percentage > 50) 
                $questions_data[$index]['similar_questions_ids'][] = $inner_data['question_id'];
        }   
     }
}

क्या कोई मेरी समस्या को हल करने में मदद कर सकता है? अगर आपके पास मौजूदा कोड को अनुकूलित करने का कोई विचार है, तो इसका स्वागत किया जाएगा।

0

3 उत्तर

खुद से एक प्रश्न की तुलना करने से बचने के लिए, आप पहले यह जांचने की कोशिश कर सकते हैं कि प्रश्न की आईडी उतनी ही नहीं है जितनी इसकी तुलना की जा रही है। तो, तुलना शुरू करने से ठीक पहले कुछ जोड़ें

if ($question['question_id'] !== $compared_question['question_id']) {
   //Your compare code
}

वास्तव में आपके कोड में वास्तव में नहीं देख सकता है कि आपको इसे कहां रखना चाहिए, लेकिन मुझे आशा है कि आपको यह विचार मिल जाएगा!

0
जोड़ा

@Galden के रूप में पालन करें। यदि प्रश्न_आईडी समान है तो यह केवल/लूप ऑपरेशन से बच जाएगा। अनुकूलन के बारे में बात करते हुए, इस लाइन को हटा दें

 $questions = $questions_data;

यह जरूरी नहीं है और आपकी स्क्रिप्ट धीमा कर देता है।

 $questions_data = $this->mDb->FetchArray();

ऊपर की रेखा बस पर्याप्त है। किसी भी अच्छे कारण के लिए किसी चर को किसी चर को असाइन करने के बजाय इस चर का उपयोग करें।

0
जोड़ा
foreach($questions as $index1=>$outer_data) {
    foreach($questions as $index2=>$inner_data) {
        if($index1 != $index2){ //check the indexes(keys) 
        //your compare code
        }

// ... आशा करता हूँ की ये काम करेगा...

0
जोड़ा