我有很多项数据。有时var不会被创建/设置,有时它是。这是因为var数据来自带有可选字段的表单。
我只有在信息存在时才创建变量:
if(!empty($_POST["user-jobtitle"])){
$idealJobTitle = $_POST["user-jobtitle"]; }
因此,如果未填写字段user-jobtitle
,则不会创建$idealJobTitle
。
我现在希望创建一个带有每个值的键的数组。但是我只想添加数组,如果该变量存在的话。否则,我只想省略它。
我已经编写了下面的代码,我知道这是错误的,但遵循我追求的那种逻辑。这样做的正确方法是什么?我是否真的必须通过嵌套的if
语句来检查var是否存在并且只是推送到数组?
$other_info = array (
"other_info" => array(
if(isset($message)){
"message" => $message
},
if(isset($salaryRange)){
"salary_range" => $salaryRange
},
if(isset($idealJobTitle)){
"ideal_job_title" => $idealJobTitle
}
if(isset($applyFor)){
"ideal_applying_for" => $applyFor
}
)
);
如果用户未在表单上提供ideal job title
,预期结果将如此:
array(1) {
["other_info"]=>
array(3) {
["message"]=>
string(18) "my message here"
["salary_range"]=>
string(19) "£25k - £30k"
["ideal_applying_for"]=>
string(18) "Cat cuddler"
}
}
正如您在上面所看到的,ideal_job_title
键和值根本不存在。
答案 0 :(得分:4)
if
语句。处理此问题的最有效方法是使用您稍后将在$other_info
数组中使用的表单中的名称。在整个代码中转换各种变量和键名称只是非常混乱,毫无意义,并且不必要地需要大量额外的代码。换句话说,为什么在不同的上下文中需要将同一条信息称为user-jobtitle
和$idealJobTitle
以及ideal_job_title
?如果你保持一致,你可以简单地过滤空值并完成它:
$other_info = array('other_info' => array_filter($_POST));
是的,array_filter
摆脱了没有单独if
语句的空元素。您可以进一步使用here和类似功能来进一步过滤掉密钥。
答案 1 :(得分:2)
如果将变量命名为数组中的键,则可以使用紧凑函数。未定义的变量不在数组
中$ar = compact("message", "salaryRange", "idealJobTitle", "applyFor");
答案 2 :(得分:0)
您可以使用以下代码:
$other_info = array();
if(isset($message)){
$other_info['other_info']["message"] = $message;
}
if(isset($salaryRange)){
$other_info['other_info']["salary_range"] = $salaryRange;
}
if(isset($idealJobTitle)){
$other_info['other_info']["ideal_job_title"] = $idealJobTitle;
}
if(isset($applyFor)){
$other_info['other_info']["ideal_applying_for"] = $applyFor;
}
答案 3 :(得分:0)
您已经有一个可以运行的代码并将值放在变量中。创建一个空数组,并将数据直接放在数组中的各种键下,而不是单个变量:
$info = array();
// Analyze the input, put the values in $info at the correct keys
if (! empty($_POST["message"])) {
$info["message"] = $_POST["message"];
};
if (! empty($_POST["salaryRange"])) {
$info["salary_range"] = $_POST["salaryRange"];
};
if (! empty($_POST["idealJobTitle"])) {
$info["ideal_job_title"] = $_POST["idealJobTitle"];
}
if (! empty($_POST["applyFor"])) {
$info["ideal_applying_for"] = $_POST["applyFor"];
}
// Voila! Your data is now in $info instead of several variables
// If you want to get the structure you described in the non-working code you can do:
$other_info = array(
"other_info" => $info,
);