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


Add fixed xml to the end of a php foreach

我们试图在数组的末尾添加一个固定值,我们目前拥有的代码是:

        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);
        }
输出:

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

我试过在数组之后添加这段代码,但它没有正确格式化,有什么想法吗?

    $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'];

简单输出为:

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

当您应该在那里添加新字典时,您目前只向$xml['Contact']['Document']['Item']字典添加新的键值对。

您还需要为这个新项定义一个键并添加。

$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'];

$somekey的值取决于您的应用程序

您没有为固定值添加构建相同的结构:

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

第一行['Item']是数组的数组,即[$k]部分。你没有在固定添加中做子索引,这意味着你将文本从其他所有内容中"向上"添加一级。

基本上就是生成

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