Switch或Foreach替换一系列if - else语句?

时间:2013-12-08 15:07:29

标签: php post foreach switch-statement

我对使用哪种方法感到困惑,或者我应该同时使用它们。我有一系列的帖子数据,想要先检查每个$_POST['data']是否为空,然后如果它是空的,请将变量$ data设置为我的数据库中的某个值。如果它不是空的,那么我想设置$data = $_POST['data']

我知道我可以使用一系列if语句,但严肃地说,必须有一种更有效的方法。我考虑过切换$_POST[$key],但转换是否知道我在谈论$key而不是$_POST?我将测试这个,但我想知道这个领域的最佳实践。

作为参考,我正在为我的公司制作更新员工数据应用程序。如果用户填写表单区域,那么我希望新数据进入我的$update_data数组,但如果用户将表单区域留空,我希望将这些输入设置为其当前值,这样它们就可以了不要从数据库中删除。

- 编辑 -

所以我才意识到使用开关可能意味着更多的代码,因为无论如何我都必须编写if语句。的foreach ??

- 编辑 -

if (empty($_POST) === false && empty($errors) === true) {
    if (empty($_POST['name']) === false) {
        $staff_name = $_POST['name'];
    } else {
        $staff_name = staff_data($staff_id, 'name', $_POST['language']);
    }

    if (empty($_POST['title']) === false) {
        $title = $_POST['title'];
    } else {
        $title = staff_data($staff_id, 'title', $_POST['language']);
    }

    if (empty($_POST['email']) === false) {
        $email = $_POST['email'];
    } else {
        $email = staff_data($staff_id, 'email', $_POST['language']);
    }

    // ... You get it a lot of if statements one for each array key below:

    $staff_data = array(
            'name'          => $staff_name,
            'title'         => $title,
            'email'         => $email,
            'phone'         => $phone,
            'quote'         => $quote,
            'specialty'     => $specialty,
            'bio'           => $bio,
            'path'          => $path,
            'language_id'   => $_POST['language']
        );

        if(staff_exists($staff_id, $_POST['language']) === true) {
            change_staff($staff_id, $staff_data, $_POST['language']);
        } else {
            insert_staff($staff_id, $staff_data);
        }

1 个答案:

答案 0 :(得分:1)

switch语句基本上允许您测试变量的值,并在值与指定值匹配时执行某些函数。这是一个例子:

$favcolor="red";
switch ($favcolor) // switch will test for various values against variable $favcolor
{
    case "red":  // If value of $favcolor equals `red`
      echo "Your favorite color is red!"; // then this code will be executed
      break;
    case "blue": // if value of $favcolor equals `blue`
      echo "Your favorite color is blue!"; // then this code will be executed
      break;
    case "green":
      echo "Your favorite color is green!";
      break;
    default: // if value of $favcolor does not equal `red`, `blue` or `green`
      echo "Your favorite color is neither red, blue, or green!"; // then this code will be executed
}

另一方面,foreach循环用于非常不同的目的。它通常用于迭代一组值(数组)并为每个值执行特定的代码。

foreach ($array as $value)
{ 
   // you may check the value to match something but its not required
   if($value === "NINJA") {
      echo "You are about to die!";
   } else {
      echo "You are Lucky!";
   }
}

或者您可以简单地运行foreach循环而不检查任何值并为每个值执行特定的代码片段,如下所示:

foreach ($array as $value)
{ 
   //code to be executed;
}

何时使用?

如果您只想循环数组并为每个值执行函数,请使用foreach

如果要针对各种值测试特定变量并使用基于该值的函数,请使用switch

switch语句也可以在foreach循环中使用,实际上它在各种情况下都很有用。因此,如果我使用foreach和switch重新编写上述函数,它将类似于:

foreach ($array as $value)
{ 
   switch ($value)
   {
      case "NINJA" :
          echo "You are about to die!";
          break;
      default :
          echo "You are Lucky!";
   }
}

但是,如果你想再次测试多个值而不仅仅是几个值,你通常会想要使用switch语句。它使您的代码更易读,更易于管理。