2015-05-22 2 views
2

Мы пытаемся, чтобы добавить фиксированное значение к концу массива, код, который мы в настоящее время является:Добавить неподвижную XML в конце PHP Еогеасп

 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> 

ответ

2

Вы в настоящее время только добавление новых пар ключ-значение в словаре $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 зависит от вашего приложения.

+0

Спасибо, кажется настолько очевидным, когда вы видите ответ! Дурак я! – Nick

2

Вы не строите ту же структуру для вашего добавления фиксированного значения:

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