【问题标题】:Switch or Foreach to replace a series of if - else statements? [closed]Switch 或 Foreach 替换一系列 if - else 语句? [关闭]
【发布时间】:2013-12-08 15:07:28
【问题描述】:

我不知道该使用哪个,或者是否应该同时使用。我有一个发布数据数组,想先检查每个$_POST['data'] 是否为空,如果为空,则将变量 $data 设置为数据库中的某个值。如果它不为空,那么我想设置$data = $_POST['data']

我知道我可以使用一系列 if 语句,但说真的,必须有更有效的方法。我考虑过切换$_POST[$key],但交换机是否知道我说的是$key,而不是$_POST?我将对此进行测试,但我想知道该领域的最佳实践是什么。

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

-- 编辑--

所以我才意识到使用 switch 可能意味着更多的代码,因为无论如何我都必须编写 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);
        }

【问题讨论】:

  • 我们可以查看您当前的代码吗?
  • 是的,我刚刚发布了相关部分

标签: php post foreach switch-statement


【解决方案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 语句。它使您的代码更具可读性和易于管理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-05
    • 1970-01-01
    • 2014-05-22
    相关资源
    最近更新 更多