代码之家  ›  专栏  ›  技术社区  ›  omega1

php-数组中“if”语句的替代项

  •  0
  • omega1  · 技术社区  · 6 年前

    我一直在阅读,找不到一个适合我的需求的解决方案。我需要根据条件动态地向数组的“add”部分添加值。我知道你不能 if 数组内部的语句。

    正确的语法(从文档中)是:

    $subResult = $gateway->subscription()->create([
        'paymentMethodToken' => 'the_token',
        'planId' => 'thePlanId',
        'addOns' => [
            'add' => [
                [
                    'inheritedFromId' => 'addon1',
                    'amount' => '10'
                ],
                [
                    'inheritedFromId' => 'addon2',
                    'amount' => '10'
                ]
            ]
        ]
    ]);
    

    从我读到的一个类似的问题来看,我尝试了以下操作(其中$addon1和$addon2是代码前面设置的条件)

    $addon1 = true;
    $addon2 = true;
    $subResult = $gateway->subscription()->create([
     'paymentMethodToken' => 'the_token',
        'planId' => 'thePlanId',
        'addOns' => [
            'add' => [
                        ($addon1 ? array(
                            [
                            'inheritedFromId' => 'productAddon1Id',
                            'amount' => '10'
                            ]) : false),
                        ($addon2 ? array(
                            [
                            'inheritedFromId' => 'productAddon2Id',
                            'amount' => '10'
                            ]) : false)
                    ]
            ]
    
    ]);
    

    但是我回来了 Warning: XMLWriter::startElement(): Invalid Element Name 因此,我怀疑它不喜欢这种结构,代码失败并出现致命错误(有趣的是,如果我只将第一个$addon设置为true,它仍然会发出警告,但确实有效。两次失败)。

    有没有其他方法可以做到这一点,或者我是不是把语法弄错了?

    由于可能的产品组合太多,我无法硬编码所有的可能性。

    会很感激和帮助的。谢谢您。

    4 回复  |  直到 6 年前
        1
  •  2
  •   Niet the Dark Absol    6 年前

    不要一下子做所有的事。

    $add = [];
    if( $addon1)
      $add[] = ['inheritedFromId'=>.......];
    if( $addon2)
      .....
    
    $subResult = $gateway->subscription()->create([
      'paymentMethodToken' => 'the_token',
      'planId' => 'thePlanId',
      'addOns' => [
        'add' => $add
      ]
    ]);
    
        2
  •  1
  •   treyBake user1850175    6 年前

    可以将if语句放在数组声明中,称为三元运算:

    $myArray['key'] = ($foo == 'bar' ? 1 : 2);
    

    这是使用的基础。

        3
  •  1
  •   GluePear    6 年前

    你用的是 array() 语法和短数组语法( [] )见 the manual . 这意味着你的第一个元素 add 将是数组中的数组。也许这就是发生XML错误的原因?最好是:

            'add' => [
                        ($addon1 ? 
                            [
                            'inheritedFromId' => 'productAddon1Id',
                            'amount' => '10'
                            ] : null),
                        ($addon2 ?
                            [
                            'inheritedFromId' => 'productAddon2Id',
                            'amount' => '10'
                            ] : null)
                    ]
            ]
    
        4
  •  0
  •   Solmyr    6 年前

    你的语法很好。您正在使用此结构创建数组

    array (size=3)   
    'paymentMethodToken' => string 'the_token' 
       (length=9) 
       'planId' => string 'thePlanId' 
       (length=9)   
       'addOns' => 
        array (size=1)
          'add' => 
            array (size=2)
              0 => 
                array (size=1)
                  ...
              1 => 
                array (size=1)
                  ...
    

    我的问题是$gateway->subscription()->create()不喜欢数组的这种结构。可能是“false”作为值或数字键。检查它的期望值,然后使用数组的新结构重试。