2017-07-14 92 views
-2

我使用了条纹API,像这样:检查变量添加关键阵列之前设置 - PHP

$coupon = $_POST["coupon"]; 

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

当$优惠券设置这个伟大的工程,这是一个有效的优惠券代码。如果我将其留空(即客户未在提交的表单中包含优惠券代码),则Stripe将引发错误。如果我包含Stripe中不存在的优惠券代码,则会引发错误。

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

+0

'如果(isset($ _ POST [ “优惠券”))'? – Gogol

+1

或'if(!empty())' –

+0

@Gogol我知道如何检查变量是否已设置,但是如果未设置,那么我甚至不能在我的数组中包含''优惠券''键。 – jonmrich

回答

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

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

将抛出异常,如果'$ _POST [“优惠券”]“未设置。 – Gogol

+1

__Nope__,如果没有设置$ _POST ['coupon']',__not__既不会抛出异常也不会发出警告。 –

+0

它会发出警告:https://stackoverflow.com/a/7191642/1437261 – Gogol

3

我会写这样的:

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

但要看。感谢不要恐慌,指出empty是更好的选择,而不是isset

1

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

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

此读取,如果你有变量$coupon集,然后将其与关键'coupon'分配给数组$arr,别的什么也不做。

你的全代码段会是什么样子,

$coupon = $_POST["coupon"]; 

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

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

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