2013-11-02 105 views
1

如何從XML節點中精確移除不需要的父項並保持數據不變?像陣列移位。 例如,我有一個數組PHP Array - 刪除未鎖定的密鑰+保留數據

  [LineItems] => Array 
       (
        [0] => Array 
         (
          [LineItem] => Array 
           (
            [Description] => iPhone 
            [Quantity] => 1 
            [UnitAmount] => 101.0000 
            [AccountCode] => 200 
            [TaxAmount] => 0.0000 
            [LineAmount] => 101.0000 
           ) 

         ) 

        [1] => Array 
         (
          [LineItem] => Array 
           (
            [Description] => Flat Shipping Rate 
            [Quantity] => 1 
            [AccountCode] => 200 
            [UnitAmount] => 5.0000 
            [LineAmount] => 5.0000 
           ) 

         ) 

       ) 

如何確切地除去了LineItem [0]和了LineItem [1]和推的LineItem陣列向左?我在尋找這樣的事情:

[LineItems] => Array 
       (
        [LineItem] => Array 
           (
            [Description] => iPhone 
            [Quantity] => 1 
            [UnitAmount] => 101.0000 
            [AccountCode] => 200 
            [TaxAmount] => 0.0000 
            [LineAmount] => 101.0000 
           ) 

         ) 

        [LineItem] => Array 
           (
            [Description] => Flat Shipping Rate 
            [Quantity] => 1 
            [AccountCode] => 200 
            [UnitAmount] => 5.0000 
            [LineAmount] => 5.0000 
           ) 

         ) 

此外,轉換陣列狀時:

Array 
(
    [Invoices] => Array 
     (
......something.... 
) 
) 

當轉換爲XML,XML將輸出

<?xml version="1.0" encoding="UTF-8"?> 
<root> 
    <Invoices> 
    </Invoices> 
</root> 

我如何實際上刪除根?

在此先感謝。

+0

我期待這樣的事情 - > http://pastebin.com/raw.php?i=3R08esvr – MrYanDao

+2

這是不可能的,你不能有重複的鍵... –

+0

正如onetrickpony所說,你不能有這樣的重複鍵。你想使用'Description'作爲鍵嗎? – Barmar

回答

1
$tmparr=[]; 
array_push($tmparr,$arr[LineItems][0][LineItem],$arr[LineItems][1][LineItem]); 
unset($arr[LineItems][0],$arr[LineItems][1]); 
foreach($tmparr as $key=>$val){ 
$arr[LineItems][]=$val; 
}; 
unset($tmparr); 

我猜...

1
foreach ($my_array['Invoices']['LineItems'] as & $lineItem) 
    $lineItem = $lineItem['LineItem']; 

關於XML的問題,你可以試試這個功能(基於a comment on PHP.net):

function array2xml($array, $root_element_name = 'root') 
{ 
    if (count($array) == 1) { 
     $root_element_name = reset(array_keys($array)); 
     $array = reset($array); 
    } 
    $xml = new SimpleXMLElement("<?xml version=\"1.0\"?><{$root_element_name}/>"); 

    function xml_builder($node, $array) { 
      foreach($array as $key => $value) { 
       if (is_array($value)) { 
        if (is_integer($key) && count($value) == 1) { 
         $key = reset(array_keys($value)); 
         $value = reset($value); 
        } 
        $child = $node->addChild($key); 
        xml_builder(& $child, $value); 
       } else { 
        $node->addChild($key, $value); 
       } 
      } 
    }; 
    xml_builder(& $xml, $array); 

    return $xml->asXML(); 
} 

print htmlentities(array2xml($my_array));