2013-08-01 37 views
0

我具有以下XML其中我轉換爲陣列XML來陣列轉換

<?xml version="1.0" encoding="utf-8"?> 
<root> 
    <student-No>S0001</student-No> 
    <Title>Mr</Title> 
    <firstName>John</firstName> 
    <lastName>Doe1</lastName> 
    <gender>male</gender> 
    <address>australia</address> 
    <mobileNumber>987654321</mobileNumber> 
    <homeNumber>000-000-000</homeNumber> 
    <email>[email protected]</email> 
    <institute>act</institute> 
    <grade>begineer</grade> 
    <student-No>S0002</student-No> 
    <Title>Mr</Title> 
    <firstName>Sheen</firstName> 
    <lastName>D</lastName> 
    <gender>male</gender> 
    <address>australia</address> 
    <mobileNumber>987654321</mobileNumber> 
    <homeNumber>000-000-001</homeNumber> 
    <email>[email protected]</email> 
    <institute>act</institute> 
    <grade>begineer</grade> 
    <student-No>S0003</student-No> 
    <Title>Mr</Title> 
    <firstName>Mark</firstName> 
    <lastName>Webber</lastName> 
    <gender>male</gender> 
    <address>australia</address> 
    <mobileNumber>987654321</mobileNumber> 
    <homeNumber>000-000-002</homeNumber> 
    <email>[email protected]</email> 
    <institute>act</institute> 
    <grade>begineer</grade> 
    <student-No>S0004</student-No> 
    <Title>Mr</Title> 
    <firstName>Eric</firstName> 
    <lastName>smith</lastName> 
    <gender>male</gender> 
    <address>australia</address> 
    <mobileNumber>987654321</mobileNumber> 
    <homeNumber>000-000-003</homeNumber> 
    <email>[email protected]</email> 
    <institute>act</institute> 
    <grade>begineer</grade> 
    <student-No>S0005</student-No> 
    <Title>Mr</Title> 
    <firstName>Larry</firstName> 
    <lastName>Page</lastName> 
    <gender>male</gender> 
    <address>australia</address> 
    <mobileNumber>987654321</mobileNumber> 
    <homeNumber>000-000-004</homeNumber> 
    <email>[email protected]</email> 
    <institute>act</institute> 
    <grade>begineer</grade> 
    <student-No>S0006</student-No> 
    <Title>Mr</Title> 
    <firstName>Mark</firstName> 
    <lastName>z</lastName> 
    <gender>male</gender> 
    <address>australia</address> 
    <mobileNumber>987654321</mobileNumber> 
    <homeNumber>000-000-005</homeNumber> 
    <email>[email protected]</email> 
    <institute>act</institute> 
    <grade>begineer</grade> 
    <student-No>S0007</student-No> 
    <Title>Mr</Title> 
    <firstName>william</firstName> 
    <lastName>s</lastName> 
    <gender>male</gender> 
    <address>australia</address> 
    <mobileNumber>987654321</mobileNumber> 
    <homeNumber>000-000-006</homeNumber> 
    <email>[email protected]</email> 
    <institute>act</institute> 
    <grade>begineer</grade> 
    <student-No>S0008</student-No> 
    <Title>Mr</Title> 
    <firstName>bill</firstName> 
    <lastName>G</lastName> 
    <gender>male</gender> 
    <address>australia</address> 
    <mobileNumber>987654321</mobileNumber> 
    <homeNumber>000-000-007</homeNumber> 
    <email>[email protected]</email> 
    <institute>act</institute> 
    <grade>begineer</grade> 
    <student-No>S0009</student-No> 
    <Title>Mr</Title> 
    <firstName>ricky</firstName> 
    <lastName>p</lastName> 
    <gender>male</gender> 
    <address>australia</address> 
    <mobileNumber>987654321</mobileNumber> 
    <homeNumber>000-000-008</homeNumber> 
    <email>[email protected]</email> 
    <institute>act</institute> 
    <grade>begineer</grade> 
    <student-No>S0010</student-No> 
    <Title>Mrs</Title> 
    <firstName>emma</firstName> 
    <lastName>Webber</lastName> 
    <gender>female</gender> 
    <address>australia</address> 
    <mobileNumber>987654321</mobileNumber> 
    <homeNumber>000-000-009</homeNumber> 
    <email>[email protected]</email> 
    <institute>act</institute> 
    <grade>begineer</grade> 
</root>  

我使用以下代碼來生成XML

$xmlObject = new SimpleXMLElement($xml); 
print_r(@json_decode(@json_encode($xmlObject),1)); 

它產生以下輸出作爲陣列

Array ([student-No] => Array ([0] => S0001 [1] => S0002 [2] => S0003 [3] => S0004 [4] => S0005 [5] => S0006 [6] => S0007 [7] => S0008 [8] => S0009 [9] => S0010) [Title] => Array ([0] => Mr [1] => Mr [2] => Mr [3] => Mr [4] => Mr [5] => Mr [6] => Mr [7] => Mr [8] => Mr [9] => Mrs) [firstName] => Array ([0] => John [1] => Sheen [2] => Mark [3] => Eric [4] => Larry [5] => Mark [6] => william [7] => bill [8] => ricky [9] => emma) [lastName] => Array ([0] => Doe1 [1] => D [2] => Webber [3] => smith [4] => Page [5] => z [6] => s [7] => G [8] => p [9] => Webber) [gender] => Array ([0] => male [1] => male [2] => male [3] => male [4] => male [5] => male [6] => male [7] => male [8] => male [9] => female) [address] => Array ([0] => australia [1] => australia [2] => australia [3] => australia [4] => australia [5] => australia [6] => australia [7] => australia [8] => australia [9] => australia) [mobileNumber] => Array ([0] => 987654321 [1] => 987654321 [2] => 987654321 [3] => 987654321 [4] => 987654321 [5] => 987654321 [6] => 987654321 [7] => 987654321 [8] => 987654321 [9] => 987654321) [homeNumber] => Array ([0] => 000-000-000 [1] => 000-000-001 [2] => 000-000-002 [3] => 000-000-003 [4] => 000-000-004 [5] => 000-000-005 [6] => 000-000-006 [7] => 000-000-007 [8] => 000-000-008 [9] => 000-000-009) [email] => Array ([0] => [email protected] [1] => [email protected] [2] => [email protected] [3] => [email protected] [4] => [email protected] [5] => [email protected] [6] => [email protected] [7] => [email protected] [8] => [email protected] [9] => [email protected]) [institute] => Array ([0] => act [1] => act [2] => act [3] => act [4] => act [5] => act [6] => act [7] => act [8] => act [9] => act) [grade] => Array ([0] => begineer [1] => begineer [2] => begineer [3] => begineer [4] => begineer [5] => begineer [6] => begineer [7] => begineer [8] => begineer [9] => begineer)) 

這裏它創建了所有student-no元素作爲一個數組,所有Title元素作爲一個數組 在生成的二維數組中。 取而代之的是,我想這樣的輸出,其中每行是如何能做到這一點,例如

Array ([0] => Array ([student-No] => S0001 [Title] => Mr [firstName] => John [lastName] => Doe1 [gender] => male [address] => australia [mobileNumber] => 987654321 [homeNumber] => 000-000-000 [email] => [email protected] [institute] => act [grade] => begineer) [1] => Array ([student-No] => S0002 [Title] => Mr [firstName] => Sheen [lastName] => D [gender] => male [address] => australia [mobileNumber] => 987654321 [homeNumber] => 000-000-001 [email] => [email protected] [institute] => act [grade] => begineer) [2] => Array ([student-No] => S0003 [Title] => Mr [firstName] => Mark [lastName] => Webber [gender] => male [address] => australia [mobileNumber] => 987654321 [homeNumber] => 000-000-002 [email] => [email protected] [institute] => act [grade] => begineer) [3] => Array ([student-No] => S0004 [Title] => Mr [firstName] => Eric [lastName] => smith [gender] => male [address] => australia [mobileNumber] => 987654321 [homeNumber] => 000-000-003 [email] => [email protected] [institute] => act [grade] => begineer) [4] => Array ([student-No] => S0005 [Title] => Mr [firstName] => Larry [lastName] => Page [gender] => male [address] => australia [mobileNumber] => 987654321 [homeNumber] => 000-000-004 [email] => [email protected] [institute] => act [grade] => begineer) [5] => Array ([student-No] => S0006 [Title] => Mr [firstName] => Mark [lastName] => z [gender] => male [address] => australia [mobileNumber] => 987654321 [homeNumber] => 000-000-005 [email] => [email protected] [institute] => act [grade] => begineer) [6] => Array ([student-No] => S0007 [Title] => Mr [firstName] => william [lastName] => s [gender] => male [address] => australia [mobileNumber] => 987654321 [homeNumber] => 000-000-006 [email] => [email protected] [institute] => act [grade] => begineer) [7] => Array ([student-No] => S0008 [Title] => Mr [firstName] => bill [lastName] => G [gender] => male [address] => australia [mobileNumber] => 987654321 [homeNumber] => 000-000-007 [email] => [email protected] [institute] => act [grade] => begineer) [8] => Array ([student-No] => S0009 [Title] => Mr [firstName] => ricky [lastName] => p [gender] => male [address] => australia [mobileNumber] => 987654321 [homeNumber] => 000-000-008 [email] => [email protected] [institute] => act [grade] => begineer) [9] => Array ([student-No] => S0010 [Title] => Mrs [firstName] => emma [lastName] => Webber [gender] => female [address] => australia [mobileNumber] => 987654321 [homeNumber] => 000-000-009 [email] => [email protected] [institute] => act [grade] => begineer)) 

每個數組 的元素?

+0

沒有像將XML轉換爲JSON然後轉換爲數組那樣簡單化的事情將在這裏完成這項工作。我建議查看DOMDocument API。一些你可以使用的方法的僞代碼是'$ students = array(); $ student = array(); foreach(根元素){if(元素名稱==「student-No」){$ student = array(); $ students [] = $ student; } $ student [元素名稱] =元素值; }' – JLRishe

+0

@JLRishe幾乎我所要提出的建議,並且值得回答而不是評論,儘管在這種情況下SimpleXML和DOM一樣合適。算法中也存在一些錯誤,例如你在那裏寫的。你在提交舊文件之前創建一個空白的'$學生'*。 – IMSoP

回答

0

不幸的是,XML的設計不是特別好,沒有將每個學生的屬性組合在一起的元素。您必須按順序遍歷所有子節點(使用->children()),並在檢查過程中檢查其名稱(使用->getName()),每次遇到<student-No>節點時創建一個新的「學生」。

粗糙的算法可能看起來是這樣的:

# create an empty list of students 

foreach ($xml->children() as $node) 
{ 
    if ($node->getName() == 'student-No') 
    { 
     # add completed student array to the list 
     # (unless this is the first student) 

     # create a new empty student array 
    } 

    # set $node->getName() in the current student array to (string)$node 
} 

# add the last completed student to the list 
+0

是的,我認爲xml也沒有正確設計。我從一些不同的來源獲取xml,讓我檢查一下是否可以改變它。 – MyDisplayName

0

試試這個,它可能工作

<?php 
     $xmlObject = new SimpleXMLElement($xml);        
            $json = json_encode($xmlObject); 
            $array = json_decode($json,TRUE); 
            //print_r($array); 
      //Array in which all values are stored 
            $jsonArray = array(); 
     //temporary arrays to store each array value 
            $temp1 = array(); 
            $temp2 = array(); 
            $temp3 = array(); 
            foreach ($array as $values){ 
              array_push($temp1 , $values[0]); 
              array_push($temp2 , $values[1]); 
              array_push($temp3 , $values[2]); 
            } 
            $jsonArr = array($temp1 , $temp2 , $temp3); 
            print_r($jsonArr); 
            ?> 

這因此IAM使用三個數組變量的IAM輸出

Array ([0] => Array ([0] => S0001 [1] => Mr [2] => John [3] => Doe1 [4] => male [5] => australia [6] => 987654321 [7] => 000-000-000 [8] => [email protected] [9] => act [10] => begineer) [1] => Array ([0] => S0002 [1] => Mr [2] => Sheen [3] => D [4] => male [5] => australia [6] => 987654321 [7] => 000-000-001 [8] => [email protected] [9] => act [10] => begineer) [2] => Array ([0] => S0003 [1] => Mr [2] => Mark [3] => Webber [4] => male [5] => australia [6] => 987654321 [7] => 000-000-002 [8] => [email protected] [9] => act [10] => begineer)) 

將值提高到第三個數組值。如果你想要更多,你可以創建。