Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在循环中生成多级关联数组_Php_Arrays_Stripe Payments - Fatal编程技术网

Php 如何在循环中生成多级关联数组

Php 如何在循环中生成多级关联数组,php,arrays,stripe-payments,Php,Arrays,Stripe Payments,我需要传入一个行项目数组,以使用条带生成发票。最终结果应该是这样的:请注意第_行items部分 $checkout_session = \Stripe\Checkout\Session::create([ 'payment_method_types' => ['card'], 'line_items' => [['quantity' => 1, 'price_data' => ['currency' => 'CAD',

我需要传入一个行项目数组,以使用条带生成发票。最终结果应该是这样的:请注意第_行items部分

$checkout_session = \Stripe\Checkout\Session::create([
  'payment_method_types' => ['card'],
  'line_items' => [['quantity' => 1,
                    'price_data' => ['currency' => 'CAD',
                                     'unit_amount' => 750,
                                     'product_data' => ['name' => 'Name goes here',
                                                        'description' => 'Description goes here']]],
                    ['quantity' => 1,
                     'price_data' => ['currency' => 'CAD',
                                      'unit_amount' => 450,
                                      'product_data' => ['name' => 'Name goes here',
                                                         'description' => 'Description goes here']]]
                  ],
  'mode' => 'payment',
  'success_url' => $YOUR_DOMAIN.'/success.htm',
  'cancel_url' => $YOUR_DOMAIN.'/cancel.htm',
]);
在本例中,有两个行项目,但可以有任意数量的项目。问题当然是,我需要在传入该行项目数组之前生成该行项目数组,这些行项目将从数据库中出来

理想情况下,我可以在一个变量中生成line_items数组,然后传入该变量;像这样:

$checkout_session = \Stripe\Checkout\Session::create([
  'payment_method_types' => ['card'],
  'line_items' => [$lineitems],
  'mode' => 'payment',
  'success_url' => $YOUR_DOMAIN.'/success.htm',
  'cancel_url' => $YOUR_DOMAIN.'/cancel.htm',
]);
然而,到目前为止,没有运气。我可以在循环中生成一个字符串,如下所示:

foreach($rows as $row){
   $linedescription = $row["itemname"];
   $lineamount = $row["amount"];
   $linecomment = $row["comment"];

   $lineamount = $lineamount * 100;

   if($index > 0){
     $lineitems .= ",";
   }

   $lineitems = "['quantity' => 1,'price_data' => ['currency' => '".$currencycode."','unit_amount' => ".$lineamount.", 'product_data' => ['name' => '".$linecomment."','description' => '".$linedescription."']]]";

   $index ++;
}
这给了我一个确切的答案:

"[['quantity' => 1,
                    'price_data' => ['currency' => 'CAD',
                                     'unit_amount' => 750,
                                     'product_data' => ['name' => 'Name goes here',
                                                        'description' => 'Description goes here']]],
                    ['quantity' => 1,
                     'price_data' => ['currency' => 'CAD',
                                      'unit_amount' => 450,
                                      'product_data' => ['name' => 'Name goes here',
                                                         'description' => 'Description goes here']]]
              ]"

问题是,它是一个字符串,我需要它是一个数组。我尝试过json_解码,我尝试过在循环中生成一个数组而不是一个字符串,但我似乎无法得到我需要的结果。当然有一种简单的方法可以做到这一点吗?

您可以用与构建字符串相同的方法构建数组。为了便于阅读,我已将每个维度拆分为单独的代码行,但如果需要,您可以将它们合并为一行:

$lineitems = array();
foreach ($rows as $row) {
    $product_data = array('name' => $row["comment"],
                          'description' => $row["itemname"]
                          );
    $price_data = array('currency' => $currencycode,
                        'unit_amount' => $row["amount"],
                        'product_data' => $product_data
                        );
    $lineitem = array('quantity' => 1,
                      'price_data' => $price_data
                      );
    $lineitems[] = $lineitem;
}
然后,您可以简单地使用:

'line_items' => $lineitems,
在调用
\Stripe\Checkout\Session::create


请注意,如果没有用于测试的样本数据,很难确定,但此代码应该按预期工作。还请注意,从名称来看,
名称
条目应该是
$row['itemname']
,而
说明
应该是
$row['comment']

谢谢。这确实按预期生成了数组,但不幸的是,我的条带调用仍然不接受它。:/我尝试在产品数据中添加单引号等,但没有成功,我尝试用json编码包装$lineitems,但也没有成功。我注意到,当我回显json_encode版本时,该格式包含扭曲的括号而不是方括号。我想知道这是否是问题的关键。你在问题开始时打给我的电话有效吗?因为只要您使用
'line\u items'=>$lineitems,
,而不是
'line\u items'=>[$lineitems],
是,只要您使用
'line\u items'=>[$lineitems],此代码就应该生成完全相同的输入数据,所以开始时的调用确实有效。我试着传入您的示例生成的数组,就像您建议只使用'line_items'=>$lineitems一样,但这不起作用。我加载页面时出错500。(顺便问一下,您如何在注释中突出显示代码?)。事实证明,我是个白痴。我敢发誓,这早就不行了/@Vincent要在注释中突出显示为代码,请在反勾号之间插入。看见