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


Switch or Foreach to replace a series of if - else statements?

我不知道该用哪一个,或者是否应该两者都用。我有一个post数据数组,希望首先检查每个$_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);
        }

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语句。它使您的代码更可读,更易于管理。