Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.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 - Fatal编程技术网

php-替代';如果';数组内的语句

php-替代';如果';数组内的语句,php,arrays,Php,Arrays,我一直在四处阅读,找不到适合我的需求的解决方案。我需要根据条件动态地将值添加到此数组的“添加”部分。我知道不能在数组本身中放入任何if语句 正确的语法(来自文档)是: 根据我在SO上读到的类似问题,我尝试了以下方法(其中$addon1和$addon2是代码前面设置的条件) 但是我得到了一个警告:XMLWriter::startElement():无效的元素名,所以我怀疑它不喜欢这个结构,代码失败了,出现了一个致命错误(有趣的是,如果我只将第一个$addon设置为true,它仍然会出现警告,但确实

我一直在四处阅读,找不到适合我的需求的解决方案。我需要根据条件动态地将值添加到此数组的“添加”部分。我知道不能在数组本身中放入任何
if
语句

正确的语法(来自文档)是:

根据我在SO上读到的类似问题,我尝试了以下方法(其中$addon1和$addon2是代码前面设置的条件)

但是我得到了一个
警告:XMLWriter::startElement():无效的元素名
,所以我怀疑它不喜欢这个结构,代码失败了,出现了一个致命错误(有趣的是,如果我只将第一个$addon设置为true,它仍然会出现警告,但确实有效。有两个就失败了)

有没有其他方法可以做到这一点,或者语法有误

我不能硬编码所有的可能性,因为可能的产品组合的数量


非常感谢您的帮助。谢谢。

不要试图同时做每件事

$add = [];
if( $addon1)
  $add[] = ['inheritedFromId'=>.......];
if( $addon2)
  .....

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

不要试图同时做每件事

$add = [];
if( $addon1)
  $add[] = ['inheritedFromId'=>.......];
if( $addon2)
  .....

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

可以将if语句放入数组声明中,称为三元操作:

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

这是如何使用的基础。

您可以将if语句放入数组声明中,这称为三元操作:

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

这是如何使用的基础。

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

        'add' => [
                    ($addon1 ? 
                        [
                        'inheritedFromId' => 'productAddon1Id',
                        'amount' => '10'
                        ] : null),
                    ($addon2 ?
                        [
                        'inheritedFromId' => 'productAddon2Id',
                        'amount' => '10'
                        ] : null)
                ]
        ]

您正在使用
array()
语法和短数组语法(
[]
)。看见这意味着,例如,
add
中的第一个元素将是数组中的数组。也许这就是发生XML错误的原因?最好是:

        'add' => [
                    ($addon1 ? 
                        [
                        'inheritedFromId' => 'productAddon1Id',
                        'amount' => '10'
                        ] : null),
                    ($addon2 ?
                        [
                        'inheritedFromId' => 'productAddon2Id',
                        'amount' => '10'
                        ] : null)
                ]
        ]

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

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”作为值或数字键。检查它期望的是什么,然后使用新的数组结构重试。

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

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”作为值或数字键。检查它期望的是什么,然后使用新的数组结构重试。

在我看来很混乱,为什么不单独构建插件,稍后再添加呢?出于某种原因,您现在在那里有一个额外的array()调用,如果加载项不存在,您是否希望在那里有一堆假值?听起来这是一个XML问题(无效模式?),而不是ternary的使用。在我看来很混乱,为什么不单独构造加载项并在以后添加它们呢?出于某种原因,您现在有一个额外的array()调用,如果加载项不存在,您是否希望在其中包含一堆假值?听起来这是一个XML问题(无效模式?),而不是ternary的使用。谢谢,这是我最容易理解并按预期工作的方法。感谢您花时间响应。实际上,它只在所有条件都为真时才起作用,如果其中一个条件为假,它将失败,并出现
致命错误:未捕获异常“InvalidArgumentException”,消息为“invalid keys:addOns[add],addOns[add]”
我将其编辑为返回
null
而不是
false
,可能值得一试。如果不是的话,我推荐Niet the Dark Absol的解决方案。谢谢你,这是我最容易理解的解决方案,并且按照预期工作。感谢您花时间响应。实际上,它只在所有条件都为真时才起作用,如果其中一个条件为假,它将失败,并出现
致命错误:未捕获异常“InvalidArgumentException”,消息为“invalid keys:addOns[add],addOns[add]”
我将其编辑为返回
null
而不是
false
,可能值得一试。如果不是,我推荐Niet the Dark Absol的解决方案。@Progrock在某种程度上是的,但OP put的
我知道你不能在数组本身中放入任何If语句。
-我的回答表明确实有可能做到这一点,也可以做到这一点,这将是问题的解决方案:)@Progrock在某种程度上是的,但是OP put的
我知道不能将任何if语句放入数组本身。
-我的回答表明确实可以这样做,而且可以这样做,这将是问题的解决方案:)