2017-07-14 90 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);