2013-04-09 2 views
0

그래서이 XML을 통해 내가 방황하고 있으므로 잘 처리 할 수 ​​있습니다.PHP는 XML로부터 연관 배열을 동적으로 생성합니다

$keyName => $valName 
다음

는 XML 보이는 방법처럼 : 여기

<dict> 
    <key>Major Version</key><integer>1</integer> 
    <key>Minor Version</key><integer>1</integer> 
    <key>Application Version</key><string>7.6.1</string> 
    <key>Tracks</key> 
    <dict> 
     <key>0</key> 
     <dict> 
     <key>Track ID</key><integer>0</integer> 
     <key>Name</key><string>American Idol 2013</string> 
     <key>Artist</key><string>Amber Holcomb</string> 
     <key>Album Artist</key><string>Amber Holcomb</string> 
     <key>Album</key><string>Unknown Album</string> 
     <key>Kind</key><string>MPEG audio file</string> 
     <key>Size</key><integer>3645</integer> 
     <key>Total Time</key><integer>233000</integer> 
     <key>Date Modified</key><date>Thu Mar 14 12:11:12 2013</date> 
     <key>Date Added</key><date>Thu Apr 04 16:10:15 2013</date> 
     <key>Bitrate</key><integer>128</integer> 
     <key>Location</key><string>file://localhost/Z:%5Canthony%5CMusic%5CiTunes%5CiTunes%20Media%5CMusic%5CUnknown%20Artist%5CUnknown%20Album%5CAmber%20Holcomb%20-%20A%20Moment%20Like%20This%20-%20Studio%20Version%20-%20American%20Idol%202013.mp3</string> 
     <key>File Folder Count</key><integer>-1</integer> 
     <key>Library Folder Count</key><integer>-1</integer> 
     </dict> 

나는 지금까지 내 코드를 가지고 무엇을 : 내가 동적으로 생성 할 것은이 방법으로 연관 배열입니다

$xml = simplexml_load_file(base_url().'uploads/xmlbackup2.xml'); 
     $varKey = $xml->dict[0]->dict[0]->dict[0]->children(); 

     $keyName =""; 
     $valName =""; 



foreach($xml->dict[0]->dict[0]->dict as $dict1){ 

      foreach($dict1->children() as $dictChild){ 

       if($dictChild->getName() == "key"){ 
        $keyName = $dictChild; 
       } else { 
        $valName = $dictChild; 
       } 



      } 

     } 

두 개의 배열을 만들고 병합하려고하는 등 몇 가지 시도를 해봤지만 ... 나에게 오류가 발생합니다. 코드가 잘못 처리 된 것 같습니다.

두 번째 foreach 루프가 완료된 후에 본질적으로 데이터를 SQL에 놓는 것입니다. 그러나 나는 codeigniter에서 작동하도록 연관을 먼저 만들어야한다.

+0

simpleXML을 사용합니까? – Svetoslav

+0

@svetlio - 예, 반영하도록 코드를 업데이트했습니다. 감사. –

+0

http://www.php.net/manual/en/function.simplexml-load-string.php#102277 시도해보십시오. 도움이 될 것입니다. – Svetoslav

답변

2

이것은 뭔가입니까?

$myArray = Array(); 
$currentKey;  
foreach($xml->dict[0] as $dict1){ 
    foreach($dict1->children() as $dictChild){ 
     if($dictChild->getName() == "key"){ 
      $currentKey = $dictChild; 
     } else { 
      $myArray[(string)$currentKey] = (string)$dictChild; 
     } 
    } 
} 

UPDATE 나는 코드를 테스트하고 난 당신이지고 있었다 경고를 얻고 있었다. 문자열로 변환하면 문제가 해결되는 것 같습니다. 다음은 내가 만든 예제 파일과 내가 얻는 결과입니다.

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', '1'); 

$myArray = Array(); 
$currentKey; 

$xml; 
if (file_exists('test.xml')) 
    $xml = simplexml_load_file('test.xml'); 

foreach($xml->dict[0] as $dict1){ 
    foreach($dict1->children() as $dictChild){ 
     if($dictChild->getName() == "key"){ 
      $currentKey = $dictChild; 
     } else { 
      $myArray[(string)$currentKey] = (string)$dictChild; 
     } 
    } 
} 

print '<pre>'; 
print_r($myArray); 
print '</pre>'; 

?> 

Array 
(
    [Track ID] => 0 
    [Name] => American Idol 2013 
    [Artist] => Amber Holcomb 
    [Album Artist] => Amber Holcomb 
    [Album] => Unknown Album 
    [Kind] => MPEG audio file 
    [Size] => 3645 
    [Total Time] => 233000 
    [Date Modified] => Thu Mar 14 12:11:12 2013 
    [Date Added] => Thu Apr 04 16:10:15 2013 
    [Bitrate] => 128 
    [Location] => file://localhost/Z:%5Canthony%5CMusic%5CiTunes%5CiTunes%20Media%5CMusic%5CUnknown%20Artist%5CUnknown%20Album%5CAmber%20Holcomb%20-%20A%20Moment%20Like%20This%20-%20Studio%20Version%20-%20American%20Idol%202013.mp3 
    [File Folder Count] => -1 
    [Library Folder Count] => -1 
) 
+0

아마이가있다. 지금 그것을 시도 ... BRB –

+0

그래서 나는이 시도, 내가 얻을 : PHP는 오류가 심각도가 발생했습니다 : 경고 메시지 : 잘못된 오프셋 타입 파일 이름 : 컨트롤러/xml.php 줄 번호 : 22 -------- 줄 번호 22가 $ myArray [$ currentKey] = $ dictChild를 가리키고 있습니다. –

+0

YUP YUP! 도와 주셔서 대단히 감사합니다. 전에 시도했지만 결코 시도하지 않았다. 다시 한 번 감사드립니다! :) –

관련 문제