正しい親->子の関係を表示するために、データをツリー形式でXMLソースで表示しようとしています。
問題は、子ノードが複数の子を持つことができることです(制限はありません)
フラッシュで機能する出力の例= http://fluffyduck.com.au/example-layout.jpg
ただし、これをPHP/htmlで複製することはできません。ここにサンプルのXMLソースを提供しました:http ://www.fluffyduck.com.au/sampleXML.txt
他の何人かの人々の助けを借りて、次のように、親IDとその子のリスト:
<?php
$content = file_get_contents('http://www.fluffyduck.com.au/sampleXML.txt');
$xml = new SimpleXMLElement($content);
$users = array ();
myUserReader($xml->user, $users);
function myUserReader($node, &$users)
{
if (array_key_exists("{$node['id']}", $users) === false)
{
$users["{$node['id']}"] = array ();
}
if (isset($node->user))
{
for ($key = 0; ($key < count($node->user)); $key++)
{
$user = $node->user[$key];
if (!in_array("{$node['id']}", $users["{$node['id']}"]))
{
$users["{$node['id']}"][] = "{$user['id']}";
# $users["{$node['id']}"][] = $user;
}
myUserReader($user, $users);
}
}
}
foreach ($users as $parent => $children)
{
echo "{$parent}: " . implode(", ", $children) . "\n";
}
?>
上記の結果を解析し、上記の添付画像のように情報を表示するために必要なコードを理解できません。
XMLを配列に変換することを検討しましたが、それでも同じ問題が発生します。そのために試したコードは次のとおりです。
function xmlstr_to_array($xmlstr) {
$doc = new DOMDocument();
$doc->loadXML($xmlstr);
return domnode_to_array($doc->documentElement);
}
function domnode_to_array($node) {
$output = array();
switch ($node->nodeType) {
case XML_CDATA_SECTION_NODE:
case XML_TEXT_NODE:
$output = trim($node->textContent);
break;
case XML_ELEMENT_NODE:
for ($i=0, $m=$node->childNodes->length; $i<$m; $i++) {
$child = $node->childNodes->item($i);
$v = domnode_to_array($child);
if(isset($child->tagName)) {
$t = $child->tagName;
if(!isset($output[$t])) {
$output[$t] = array();
}
$output[$t][] = $v;
}
elseif($v) {
$output = (string) $v;
}
}
if(is_array($output)) {
if($node->attributes->length) {
$a = array();
foreach($node->attributes as $attrName => $attrNode) {
$a[$attrName] = (string) $attrNode->value;
}
$output['@attributes'] = $a;
}
foreach ($output as $t => $v) {
if(is_array($v) && count($v)==1 && $t!='@attributes') {
$output[$t] = $v[0];
}
}
}
break;
}
return $output;
}
$moo = xmlstr_to_array($content);
print_r($moo);
ただし、同じ問題が存在します。正しい親->子の方法で情報を再帰的に循環して表示する方法がわかりません。
データの構築方法が原因で、「単一の」エントリを取得する方法もわかりません。それができれば、手動でツリーを再構築できる可能性があります。各レコードに一意のレコードがないため、方法がわかりません。識別子。
どんな助けでも大歓迎です。