php if clause inside foreach not retrieving data correctly

Posted by Mike on Stack Overflow See other posts from Stack Overflow or by Mike
Published on 2010-04-18T21:57:23Z Indexed on 2010/04/18 22:03 UTC
Read the original article Hit count: 430

Filed under:
|
|

Here's my issue: In my controller, I want to grab user input from a form. I then parse the input, and compare it to database values to ensure I'm grabbing the correct input. I simply want to match the user's answers to the question, grab the user ID, the question ID, and then determine if the answer applies to a multiple choice or checkbox question, or something else. I take those values and insert them into the answer table. Ignore the waiver stuff. I'll test that once I get the answers input correctly.

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

From my test data, I expect to get 2 records that match the multiple choice and checkbox criteria, and 1 record for text in the ELSE clause like this:

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

What I get is a 3x3 Cartesian product, 3 question elements each with the 3 possible answers like this output from the echo statements:

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

I've tried placing the IF clause inside the inner foreach, but I get the same results. I've been staring at this problem for way too long and cannot see what I'm doing wrong. Your kind assistance would be greatly appreciated. Please let me know if my request requires more clarification.

© Stack Overflow or respective owner

Related posts about php

Related posts about zend-form