我对使用哪种方法感到困惑,或者我应该同时使用它们。我有一系列的帖子数据,想要先检查每个$_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);
}
答案 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语句。它使您的代码更易读,更易于管理。