首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何创建具有多个相似元素的StdClass

如何创建具有多个相似元素的StdClass
EN

Stack Overflow用户
提问于 2018-08-12 07:53:37
回答 1查看 30关注 0票数 0

我让这段代码生成一个传递给SoapClient()的请求。这只是一个更大的请求对象的一部分。

代码语言:javascript
复制
//OPTIONAL DAMAGE AND TRAVEL INSURANCE HANDLING
if ( $fee_insurance != 0 || $fee_damage != 0 ) {

    $tmp_node->UnitStays->UnitStay->UnitRates->UnitRate->Rates->Rate->AdditionalCharges = new StdClass();

    //TRAVEL INSURANCE
    if ($fee_insurance != 0) {
        $AdditionalChargeINS = array(
            'Quantity' => '1',
            'ChargeTemplateID' => $ChargeTemplateID_INS,
            'Amount' => array(
                'AmountBeforeTax' => $fee_insurance,
                'Taxes' => array(
                    'Amount' => '0.00'
                )
            )
        );
    }

    //DAMAGE INSURANCE
    if ($fee_damage != 0) {
        $AdditionalChargeDAM = array(
            'Quantity' => '1',
            'ChargeTemplateID' => $ChargeTemplateID_DAM,
            'Amount' => array(
                'AmountBeforeTax' => $fee_damage,
                'Taxes' => array(
                    'Amount' => '0.00'
                )
            )
        );
    }

    $AdditionalChargeArray = (object) array($AdditionalChargeINS,$AdditionalChargeDAM);

    $tmp_node->UnitStays->UnitStay->UnitRates->UnitRate->Rates->Rate->AdditionalCharges->AdditionalCharge = $AdditionalChargeArray;
}

这将在请求中生成以下内容。

代码语言:javascript
复制
[AdditionalCharges] => stdClass Object
(
    [AdditionalCharge] => stdClass Object
        (
            [0] => Array
                (
                    [Quantity] => 1
                    [ChargeTemplateID] => 6595
                    [Amount] => Array
                        (
                            [AmountBeforeTax] => 43.62
                            [Taxes] => Array
                                (
                                    [Amount] => 0.00
                                )
                        )
                )
            [1] => Array
                (
                    [Quantity] => 1
                    [ChargeTemplateID] => 65802
                    [Amount] => Array
                        (
                            [AmountBeforeTax] => 49.00
                            [Taxes] => Array
                                (
                                    [Amount] => 0.00
                                )
                        )
                )
        )
)

但我需要像这样结束(注意两个节点都称为"AdditionalCharge":

代码语言:javascript
复制
[AdditionalCharges] => stdClass Object
(
    [AdditionalCharge] => stdClass Object
        (
        [Quantity] => 1
        [ChargeTemplateID] => 6595
        [Amount] => Array
            (
                [AmountBeforeTax] => 43.62
                [Taxes] => Array
                    (
                        [Amount] => 0.00
                    )

            )
        )
    [AdditionalCharge] => stdClass Object
        (
        [Quantity] => 1
        [ChargeTemplateID] => 65802
        [Amount] => Array
            (
                [AmountBeforeTax] => 49.00
                [Taxes] => Array
                    (
                        [Amount] => 0.00
                    )

            )
        )

)

我知道关于对象和数组之间的关系,有一些非常基本的东西我不能理解,但对于我来说,我还是搞不懂。

EN

回答 1

Stack Overflow用户

发布于 2018-08-12 09:20:36

这段代码会让你更接近你所说的你需要的东西。

代码语言:javascript
复制
$AdditionalChargeINS = array(
    'Quantity' => '1',
    'ChargeTemplateID' => "ChargeTemplateID_INS",
    'Amount' => array(
        'AmountBeforeTax' => "fee_insurance",
        'Taxes' => array(
            'Amount' => '0.00'
        )
    )
);

$AdditionalChargeDAM = array(
    'Quantity' => '1',
    'ChargeTemplateID' => "ChargeTemplateID_DAM",
    'Amount' => array(
        'AmountBeforeTax' => "fee_damage",
        'Taxes' => array(
            'Amount' => '0.00'
        )
    )
);
$arr1["additionalCharge"] = (object)$AdditionalChargeDAM;
$arr2["additionalCharge"] = (object)$AdditionalChargeDAM;
$arr  = (object)array((object)$arr1,(object)$arr2);

print_r($arr);

产生这个输出...

代码语言:javascript
复制
stdClass Object
(
    [0] => stdClass Object
        (
            [additionalCharge] => stdClass Object
                (
                    [Quantity] => 1
                    [ChargeTemplateID] => ChargeTemplateID_DAM
                    [Amount] => Array
                        (
                            [AmountBeforeTax] => fee_damage
                            [Taxes] => Array
                                (
                                    [Amount] => 0.00
                                )
                        )
                )
        )

    [1] => stdClass Object
        (
            [additionalCharge] => stdClass Object
                (
                    [Quantity] => 1
                    [ChargeTemplateID] => ChargeTemplateID_DAM
                    [Amount] => Array
                        (
                            [AmountBeforeTax] => fee_damage
                            [Taxes] => Array
                                (
                                [Amount] => 0.00
                                )
                        )
                )
        )
)

这更接近于你需要的东西,也许足以让你朝着正确的方向前进。至少使用这个结构,你可以遍历你的对象列表,做你需要的任何处理,

您所声明的所需输出的主要问题是它包含一个具有重复键'additionalCharge‘的关联数组,这是PHP不允许的:-)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51804645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档