【问题标题】:Iterating through an associative array in a function call在函数调用中迭代关联数组
【发布时间】:2020-10-18 06:53:49
【问题描述】:

我正在尝试创建一个 Stripe 订阅计划,每个计划限制为 10 个。我使用chunk 将我的数组拆分为不同的部分。有一个名为createSchedule的函数可以创建时间表。但是,当它完成时,虽然它创建了两个订阅,但它并不包括我的所有数组项,只包括第一个。

注意,为了简单起见,我截断了我的数组。在实际代码中,数组中有超过 20 项。

function createSchedule ($customer, $phases) {
  $schedule = \Stripe\SubscriptionSchedule::create([
      'customer' => $customer,
      'expand' => ['subscription'],
      'start_date' => 'now',
      'end_behavior' => 'cancel',
      'phases' => $phases,
    ]);
  }

$dataset = array(
  array(
    "product" => $product->id,
    "unit_amount" => "2020",
    "end_date" =>  date_timestamp_get(date_create("2020-07-12")) // Payment 1 Date

  ),
  array(
      "product" => $product->id,
      "unit_amount" => "2000",
      "end_date" =>  date_timestamp_get(date_create("2020-07-15")) //Payment 2 Date
  ),
  array(
      "product" => $product->id,
      "unit_amount" => "3400",
      "end_date" =>  date_timestamp_get(date_create("2020-07-16")) //Payment 3 Date
  ),
  array(
      "product" => $product->id,
      "unit_amount" => "3700",
      "end_date" =>  date_timestamp_get(date_create("2020-07-18")) //Payment 4 Date
  ),
);

$schedule_batch = array_chunk($dataset, 9);
$numberofbatches = count($schedule_batch);

$phases = [];
foreach ($schedule_batch as $index => $data) {
    $phases[] = [
      'end_date' => $data[$index]["end_date"],
      'transfer_data' => [
        'amount_percent' => $fee_percentage,
        'destination' => $account],        
      'proration_behavior' => 'none',
      'plans' => [
          [
            'price_data' => [
              'unit_amount' => $data[$index]["unit_amount"],
              'currency' => 'usd',
              'product' => $data[$index]["product"],
              'recurring' => [
                  'interval' => 'month',
              ],
            ],
            
          ],
        ],
    ];
  }


foreach ($schedule_batch as $index => $data) {
  createSchedule($customer->id, $phases);
}

【问题讨论】:

  • 从外观上看,您需要将foreach() 更深一层,因为array_chunk() 返回一个数组数组。我猜$numberofbatches === 1
  • 是在我调用函数时还是在阶段?
  • 试一试...
  • 所以我为函数调用降低了 1 级,现在它所做的是将所有项目创建为单独的计划,当它应该在一个计划或每个块数组中时
  • 如果您向我们展示您的预期结果可能会有所帮助,谢谢

标签: php arrays laravel multidimensional-array stripe-payments


【解决方案1】:

foreach 语句需要另一个级别来访问数组元素。此外,$phases = [] 的数组初始化需要放在两个 foreach 语句之间。

foreach ($schedule_batch as $index => $data) {
  $phases = [];
  foreach ($data as $index2 => $data2)
    $phases[] = [
      'end_date' => $data2["end_date"],
      'transfer_data' => [
        'amount_percent' => $fee_percentage,
        'destination' => $account],        
      'proration_behavior' => 'none',
      'plans' => [
          [
            'price_data' => [
              'unit_amount' => $data2["unit_amount"],
              'currency' => 'usd',
              'product' => $data2["product"],
              'recurring' => [
                  'interval' => 'month',
              ],
            ],
            
          ],
        ],
    ];
  }

【讨论】:

    猜你喜欢
    • 2013-12-17
    • 2011-03-07
    • 2011-12-02
    • 2015-09-09
    • 2010-09-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多