将固定的xml添加到php foreach的末尾

We're trying to add a fixed value to the end of the an array, the code we currently have is:

        foreach ($items as $k => $value) 
        {
            $xml['Contact']['Document']['Item'][$k]['Partcode'] = $value['sku'];
            $modifiers = '';
            if($modifiers_arr = json_decode($value['modifiers']))
            {
                foreach ($modifiers_arr as $mod_key => $mod_val) 
                {
                    $modifiers .= "{$mod_val->modifier_name} {$mod_val->modifier_value} ";
                    if(@$mod_val->price_mod)
                    {
                        $modifiers .= "{$mod_val->price_mod} ";
                    }
                }
            }
            $xml['Contact']['Document']['Item'][$k]['Description'] = "{$value['title']} {$modifiers}";
            $xml['Contact']['Document']['Item'][$k]['Quantity'] = "{$value['item_qty']}";
            $xml['Contact']['Document']['Item'][$k]['UnitPrice'] = "{$value['price']}";
            $xml['Contact']['Document']['Item'][$k]['UnitTax'] = round($value['item_tax'] / $value['item_qty'],2);
            $xml['Contact']['Document']['Item'][$k]['UnitNetPrice'] = $value['price'] - round(($value['item_tax'] / $value['item_qty']),2);
        }

Which outputs:

  <Item>
    <Partcode>GRF72</Partcode>
    <Description>Odour Eliminator   </Description>
    <Quantity>1</Quantity>
    <UnitPrice>4.99</UnitPrice>
    <UnitTax>0.83</UnitTax>
    <UnitNetPrice>4.16</UnitNetPrice>
  </Item>

However we want to add a fixed value after this (there can be an unlimited amount of items returned from the array), so it would end up looking like:

  <Item>
    <Partcode>GRF72</Partcode>
    <Description>Product title</Description>
    <Quantity>1</Quantity>
    <UnitPrice>4.99</UnitPrice>
    <UnitTax>0.83</UnitTax>
    <UnitNetPrice>4.16</UnitNetPrice>
  </Item>
  <Item>
    <Partcode>CAR01</Partcode>
    <Description>Delivery</Description>
    <Quantity>1</Quantity>
    <UnitPrice>4.99</UnitPrice>
    <UnitTax>0</UnitTax>
    <UnitNetPrice>4.99</UnitNetPrice>
  </Item>

Have tried just added this code after the array, but it doesn't format it correctly, any ideas?

    $xml['Contact']['Document']['Item']['Partcode'] =  "CAR01";
    $xml['Contact']['Document']['Item']['Description'] = "Shipping";
    $xml['Contact']['Document']['Item']['Quantity'] =  "1";
    $xml['Contact']['Document']['Item']['UnitPrice'] =  $order_data['order_shipping'];
    $xml['Contact']['Document']['Item']['UnitTax'] = "0";
    $xml['Contact']['Document']['Item']['UnitNetPrice'] = $order_data['order_shipping'];

Simply outputs as:

  <Item>
    <Partcode>GRF72</Partcode>
    <Description>Odour Eliminator   </Description>
    <Quantity>1</Quantity>
    <UnitPrice>4.99</UnitPrice>
    <UnitTax>0.83</UnitTax>
    <UnitNetPrice>4.16</UnitNetPrice>
  </Item>
  <Item>CAR01</Item>
  <Item>Shipping</Item>
  <Item>1</Item>
  <Item>0.00</Item>
  <Item>0</Item>
  <Item>0.00</Item>

You're currently only adding new key-value pairs to the $xml['Contact']['Document']['Item'] dictionary, when you're supposed to add a new dictionary there.

You need to define a key for this new item also and add with that.

$somekey = "somevalue";
$xml['Contact']['Document']['Item'][$somekey]['Partcode'] =  "CAR01";
$xml['Contact']['Document']['Item'][$somekey]['Description'] = "Shipping";
$xml['Contact']['Document']['Item'][$somekey]['Quantity'] =  "1";
$xml['Contact']['Document']['Item'][$somekey]['UnitPrice'] =  $order_data['order_shipping'];
$xml['Contact']['Document']['Item'][$somekey]['UnitTax'] = "0";
$xml['Contact']['Document']['Item'][$somekey]['UnitNetPrice'] = $order_data['order_shipping'];

The value of the $somekey depends on your application.

You're not building the same structure for your fixed value addition:

$xml['Contact']['Document']['Item'][$k]['Description'] = "{$value['title']} {$modifiers}";
$xml['Contact']['Document']['Item']    ['Partcode'] =  "CAR01";
                                   ^^^^^---missing index

In the first line ['Item'] is an array of arrays, the [$k] part. You're not doing that sub-index in the fixed addition, meaning you're adding your text "up" one level from everything else.

basically you're producing

$xml = array(
   'Contact' => array(
      'Document' => array(
          'Item' => array
              0 => array(
                 'Description' => ... the stuff from your loop
                 etc...
              ),
              'Partcode' => array
                  etc...   fixed part here
              )
           )
        )
    )
)