创建密钥=>仅在设置变量

时间:2015-08-27 11:36:53

标签: php arrays

我有很多项数据。有时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键和值根本不存在。

4 个答案:

答案 0 :(得分:4)

  1. 您不应该有条件地声明变量。那只是稍后会问问题。
  2. 将值从一个数组解压缩到一个变量中然后有条件地将它们打包回一个数组中是不必要的复杂。将您的数据保存在一个数组中并在一个"包"。
  3. 中移动它
  4. 您不能在数组声明中嵌套if语句。
  5. 处理此问题的最有效方法是使用您稍后将在$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,
);