PHP에서 배열을 사용하여 xml 데이터를 수정하고 다시 작성합니다. 이것은 XML 구조 (시범 목적으로 단순화)이다변수를 사용하여 다차원 배열 내의 특정 요소에 액세스하는 방법은 무엇입니까?
<docs>
<folder>
<name>Folder name</name>
<date>20.06.2009</date>
<folder>
<name>Subfolder1</name>
<date></date>
</folder>
<folder>
<name>Subfolder1</name>
<date></date>
</folder>
<file>
<name></name>
</file>
</folder>
<name></name>
<date></date>
</docs>
this code 사용이 다음 다차원 배열로 파싱 및 변환된다
Array
(
[docs] => Array
(
[_c] => Array
(
[folder] => Array
(
[_c] => Array
(
[name] => Array
(
[_v] => Folder name
)
[date] => Array
(
[_v] => 20.06.2009
)
[folder] => Array
(
[0] => Array
(
[_c] => Array
(
[name] => Array
(
[_v] => Subfolder1
)
[date] => Array
(
[_v] =>
)
)
)
[1] => Array
(
[_c] => Array
(
[name] => Array
(
[_v] => Subfolder1
)
[date] => Array
(
[_v] =>
)
)
)
)
[file] => Array
(
[_c] => Array
(
[name] => Array
(
[_v] =>
)
)
)
)
)
[name] => Array
(
[_v] =>
)
[date] => Array
(
[_v] =>
)
)
)
)
길고 알아. 하지만 지금은 실제 문제에. 내가 통해 그것을 수행 할 때 이제
array_push($array['docs']['_c']['folder']['_c']['folder'][1], $newfile);
:이 경우 Subfolder2라는 하위 폴더에 다른 파일을 추가하려면 유 구조를 볼 때, 그것은 손으로 할 수있는 문제는 아니다 (docs/폴더 이름/Subfolder2과 같은) 폴더 경로 만 알고있는 알고리즘은 배열 구조를 분석해야합니다 (각 [폴더]의 이름을 확인하고 하나 이상의 폴더가 있는지 확인하십시오. '] 또는 [number]) - 모두 좋지만 해당 새 파일에 대한 경로가 ""인 변수를 만드는 방법을 찾을 수 없습니다.
나는이 라인을 따라 어딘가에 생각했다 : 물론
$writepath = "['docs']['_c']['folder']...[1]"; // path string
array_push($array{$writepath}, $newfile);
이 유효한 구문이 아닙니다.
그럼 어떻게 배열 요소를 통해 경로가 포함 된 변수를 만들 수 있습니까? w3c와 php.net에 대한 연구를 다차원 배열에 도움이되지 않는 정보를 찾았습니다.
구조, xml 변환/조작 등에 관한 다른 제안 사항이 있으시면 누구나 알고 있습니다. 충분한 데이터 처리 방법으로 모든 입력
감사
에릭
편집 : 기준에 대해서는, 그 기준을 참조 할 수있다? 그게 배열의 집합을 통해 '포인터'를 이동하는 방법이 될 것이라고? 같은 것 :
$pointer = &$array['docs'];
if (key($pointer) == '_c') { $pointer = &$pointer['_c']; }
else (
// create an array with '_c' key instead of empty '_v' array
)
이 구문은 작동하지 않습니다.
편집 : 구문이 작동합니다. 신경 쓰지 마세요. 모든 도움 주셔서 감사합니다!
xpath를 사용하는 것은이 문제에 대한 아주 좋은 해결책입니다. xml -> array 솔루션을 사용하는 것보다 익숙해지기까지 조금 더 오래 걸립니다. 그러나 장기적으로는 효과가있을 것이라고 생각합니다. –
위대한 답변! SimpleXML 확장을 탐색하기 시작할 수 있다고 생각합니다. 관리가 훨씬 간단하기 때문입니다. 그러나 require PHP 5입니다. 고마워요! –