在向数组添加键之前检查变量是否已设置 - PHP

时间:2017-07-14 16:50:30

标签: php arrays

我正在使用Stripe API,如下所示:

$coupon = $_POST["coupon"];

$subscription = \Stripe\Subscription::create(array(
  "customer" => $customer->id,
  "plan" => $plan,
  "coupon" => $coupon,
));

当设置$优惠券并且它是有效的优惠券代码时,此功能非常有用。如果我把它留空(即客户没有在提交的表单中包含优惠券代码),Stripe会抛出错误。如果我添加了Stripe中不存在的优惠券代码,则会引发错误。

所以,问题是,当变量coupon为空时,如何构建此数组以不具有$coupon键?

3 个答案:

答案 0 :(得分:3)

我会这样写:

$args = [
  'customer' => $customer->id,
  'plan' => $plan,
];
if (!empty($_POST['coupon'])) {
  $args['coupon'] = $_POST['coupon'];
}
$subscription = \Stripe\Subscription::create($args);

但这取决于。感谢Do not Panic指出empty是更好的选择,而不是isset

答案 1 :(得分:2)

$payment_data = array(
  "customer" => $customer->id,
  "plan" => $plan,
);
if (!empty($_POST['coupon'])) {
    $payment_data["coupon"] = $_POST['coupon'];
}

$subscription = \Stripe\Subscription::create($payment_data);

答案 2 :(得分:1)

如果您真的需要它,您可以使用if条件并重新构建代码。但是我相信如果你能使用速记if子句,这将是一个漂亮的代码。

($coupon) ? $arr['coupon'] = $coupon : '';

如果您设置了变量$coupon,则会读取,然后使用密钥$arr将其分配给数组'coupon',否则不执行任何操作。

您的完整代码段看起来像

$coupon = $_POST["coupon"];

$arr = array(
 "customer" => $customer->id,
 "plan" => $plan
);

// Magic happens here
($coupon) ? $arr['coupon'] = $coupon : '';

$subscription = \Stripe\Subscription::create($arr);