我不知道该用哪一个,或者是否应该两者都用。我有一个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语句。它使您的代码更可读,更易于管理。