two-dimensional switch statement?

Do you have a question? Post it now! No Registration Necessary.  Now with pictures!

Threaded View
I have a bunch of conditions in which to determine different types of
questions to ask in a survey I am constructing.
Just was wondering if anybody has used a two-dimensional switch
statement. If this works, is this an efficient coding method or would
anybody else have another way around this?

$type = enters _POST as (employee, client, or peer)
$visit = enters _POST as ( 0 or 1 )
$userage = enters _POST as ( 1, 2, 3, or 4)
$ip is the IP address of the user

    function determineUser($type, $userage, $ip, $visit)

        switch ($type){
            case 'employee':
                switch ($userage){
                    case '1':
                    case '2': if($visit)else break;
                    case '3':
                    case '4': $surveyType=3; break;
            case 'client': if($visit)else
            case 'peer': if($visit)else break;

        $query = "INSERT INTO user(userip, userage, idsurvey)

        return (getUserId($ip));


Re: two-dimensional switch statement?


Quoted text here. Click to load it

Not yet.

Should work. Just some notes:

* I would use the ternary operator instead of the if-statements to keep
  the code a bit shorter (and more readable for me).
* You should initialize the $surveyType variable, just in case a switch  
  statement will fail.
* There was a brace and a "break" missing after the nested switch.
* Don't quote numeric values in a switch statement or in a query.
* Don't forget to validate the $ip and $userage before passing them to
  the function. They are used in a database query. If you don't make
  sure they only contain allowed values, this may lead to an SQL
  injection hole.
  You could also use PDO with prepared statements to avoid this risk.

Your function slightly modified:

function determineUser($type, $userage, $ip, $visit) {
  $surveyType = 0;
  switch ($type) {
    case 'employee':
      switch ($userage) {
        case 1:
        case 2: $surveyType = $visit ? 1 : 2; break;
        case 3:
        case 4: $surveyType = 3;
    case 'client': $surveyType = $visit ? 4 : 5; break;
    case 'peer': $surveyType = $visit ? 6 : 7;
  if ($surveyType != 0) {
    $query = "
      INSERT INTO user (userip, userage, idsurvey)
      VALUES ('$ip', $userage, $surveyType)";
    return getUserId($ip);
  } else {
    // something went wrong


Re: two-dimensional switch statement?

Miyagi wrote:
Quoted text here. Click to load it

I think using an explicit configuration / lookup table would make the  
code far more maintainable. Something along the lines of

function get_survey_type($type, $age, $visit)
    // lookup key is either 'type-age-visit'
    // or 'type-visit' (assumes any age)

    static $map = array(
        'employee-1-1' => 1,
        'employee-2-1' => 1,
        'client-1' => 4,
        'client-0' => 5,

    $key = "$type-$age-$visit";
        return $map[$key];

    $key = "$type-$visit";
        return $map[$key];

    return default or error;

gosha bine

extended php parser ~
blok ~

Site Timeline