【问题标题】:How to create a StdClass with multiple similar elements如何创建具有多个相似元素的 StdClass
【发布时间】:2018-08-11 23:53:36
【问题描述】:

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

//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;
}

这会在请求中生成这个。

[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”:

[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
                    )

            )
        )

)

我知道有一些非常基本的东西我不了解对象和数组的关系,但对于我来说,我无法弄清楚这一点。

【问题讨论】:

    标签: php arrays stdclass


    【解决方案1】:

    此代码将使您更接近您所说的需要。

    $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);
    

    产生这个输出...

    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 不允许这样做:-)

    【讨论】:

    • @enigma65.0 如果以上回答了您的问题,请接受/投票。否则,请随时要求更多说明:-)
    猜你喜欢
    • 2020-02-25
    • 1970-01-01
    • 1970-01-01
    • 2021-08-11
    • 1970-01-01
    • 1970-01-01
    • 2020-05-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多