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语句放入数组本身。
-我的回答表明确实可以这样做,而且可以这样做,这将是问题的解决方案:)