foreach içinde fıkra doğru verileri almak değil php if

2 Cevap php

İşte benim mesele: benim denetleyicisi, ben bir formdan kullanıcı girişi kapmak istiyorum. Daha sonra giriş ayrıştırmak ve ben doğru girişi kapma ediyorum sağlamak için veritabanı değerleri karşılaştırın. Ben sadece, sorunun kullanıcının cevapları neticesinde kullanıcı kimliği, soru kimliği kapmak ve sonra cevap çoklu seçim ya da onay kutusunu soruya, ya da başka bir şey için geçerli olup olmadığını belirlemek istiyor. Ben bu değerleri alıp cevap tabloya takın. Feragat şeyler görmezden. Ben doğru cevaplar girişini aldıktan sonra bunu test edeceğiz.

    // add answers and waiver consent records
    try {

        $answerArray = array();
        $waiverArray = array();

    // retrieve answers, waiver consents, and the question ID's from form object
    foreach ($formData as $key => $value) {

        $parts = explode("_", $key);

        if ($parts[0] == 'question') {                                                      
            array_push($answerArray, $value);           
        }

        if ($parts[0] == 'waiverTitle') {                                                       
            array_push($waiverArray, $value);                           
        }
    }

    $questions = new Model_DbTable_Questions();
    $questionResults = $questions->getQuestionResults($session->idEvent);                                   

    foreach ( $questionResults as $qr ) {
        if ($qr ['questionType'] == 'multipleChoice' || $qr ['questionType'] == 'checkBox') {
            foreach ( $answerArray as $aa ) {
                $answerData = $answers->addAnswer ( $lastUserID, $qr ['idQuestion'], null, $aa );
echo count ( $answerData ) . ', ' . $qr ['questionType'] . ', ' . $aa . '<br />';
            }
        } else {
            foreach ( $answerArray as $aa ) {
                $answerData = $answers->addAnswer ( $lastUserID, $qr ['idQuestion'], $aa, null );
echo count ( $answerData ) . ', ' . $qr ['questionType'] . ', ' . $aa . '<br />';
            }
        }
    }

    } 

    catch (Zend_Db_Statement_Exception $e) 
    { 

        $e->getMessage();
        throw $e;
    }

Benim test verilerinden, ben çoktan seçmeli ve onay kutusunu kriterleri, ve bu gibi ELSE maddesinde metin için 1 rekoru 2 kayıtları almak için bekliyoruz:

3, checkbox, 1
3, multipleChoice, 1
3, text, question_2

Ne olsun 3x3 Kartezyen ürün, 3 soru elemanları yankı ifadelerinden bu çıkışı gibi 3 olası cevapları ile her biri:

4, checkBox, 1
4, checkBox, 1
4, checkBox, question_2
4, multipleChoice, 1
4, multipleChoice, 1
4, multipleChoice, question_2
4, text, 1
4, text, 1
4, text, question_2

Ben iç foreach içindeki IF tümcesi yerleştirerek denedim, ama ben aynı sonuçları almak. Ben çok uzun bir yol bu soruna bakarak oldum ve ben ne yapıyorum yanlış göremiyorum. Senin tür yardım büyük mutluluk duyacağız. Benim isteği daha fazla açıklama gerektirir varsa bana bildirin lütfen.

2 Cevap

Fazla beyin-çatırdayan analizinden sonra, nihayet (tabii benim iş arkadaşınız ve arnorhs pek yardımı ile) aldım. Yardımlarınız için çok teşekkürler. Herkes için sanal bira!

$answerData = array();

$questions = new Model_DbTable_Questions();
$questionResults = $questions->getQuestionResults($session->idEvent);                                   

// retrieve answers, waiver consents, and the question ID's from form object
    foreach ($formData as $key => $value) 
    {
        $parts = explode("_", $key);
        if($parts[0] == 'question')
        {                           
            foreach ($questionResults as $question) 
            {

                if ($parts[1] == $question['idQuestion']) 
                {                   
                    if (in_array($question['questionType'], array('multipleChoice','checkBox') )) 
                    {   
                        $answerData = $answers->addAnswer ( $lastUserID, $question['idQuestion'], null, $value );
                    }
                    else 
                    {
                        $answerData = $answers->addAnswer ( $lastUserID, $question['idQuestion'], $value, null );
                    }
                }

            }
        }
    }

Ben gerçekten anlamıyorum:

  1. Eğer her soru için her bir cevap ile dolaşır orada iç içe bir döngü var beri, outputted 3 çizgiler elde düşündüm Neden ....
  2. Neden try-catch deyimi bize soruya cevap yardımcı olacağını düşündüm.

Ama senin kod basitleştirilmiş, bu yüzden birileri belki soru cevap verebilir:

<?php
$answerArray = array();
$waiverArray = array();

// retrieve answers, waiver consents, and the question ID's from form object
foreach ($formData as $key => $value) {

    $parts = explode("_", $key);

    if ($parts[0] == 'question') {                                                      
        array_push($answerArray, $value);           
    }

    if ($parts[0] == 'waiverTitle') {                                                       
        array_push($waiverArray, $value);                           
    }
}

$questions = new Model_DbTable_Questions();
$questionResults = $questions->getQuestionResults($session->idEvent);                                   

foreach ( $questionResults as $qr ) {
    foreach ( $answerArray as $aa ) {
        if (in_array($qr['questionType'], array('multipleChoice','checkBox') )) {
            $answerData = $answers->addAnswer ( $lastUserID, $qr ['idQuestion'], null, $aa );
        } else {
            $answerData = $answers->addAnswer ( $lastUserID, $qr ['idQuestion'], $aa, null );
        }
        echo count ( $answerData ) . ', ' . $qr ['questionType'] . ', ' . $aa . '<br />';
    }
}

?>