0
私は

は、変数の参照を経由してPHPの配列を作る

<head> 
    <title> My New Web Page </title> 
</head> 
<body> 
<table> 
    <tr><td><h1> Welcome to My Web Page! </h1></td></tr> 
    <tr><td><div>Menu item 1<div>Menu item 2</div></div></td></tr> 
</table> 
</body> 


$nodes_array[$recurse_count][$body_elem->tag] = $value; 

設定値にPHPの配列に変換しようとしているある再帰関数

HTML DOMを介してPHPでHTMLのDOMをナビゲートしています

関数を呼び出すたびに配列を取得し、結果としてこれを取得します。

Array 
(
    [1] => Array 
     (
      [body] => table 
     ) 

    [2] => Array 
     (
      [table] => tr 
     ) 

    [3] => Array 
     (
      [tr] => td 
     ) 

    [4] => Array 
     (
      [td] => div 
     ) 

    [5] => Array 
     (
      [div] => div 
     ) 

) 

しかし、私は、私は十分な知識がなくても、変数を参照してプレーしようとしたこの

Array 
(
    [1] => Array 
     (
      [body] => Array 
       (
        [table] => Array 
        (
         [tr] => 
          [0]=>Array 
          (
           [td] => div 
          ) 
          [1]=>Array 
          (
           [td] => Array 
           (
            [div] => div 
           ) 

          ) 

        ) 

     ) 

) 

を取得したいです。

機能コード - あなたは要素の実際の値を保存するときに、再帰関数で>

function recurve_extract($body_elem, $tag_str_name,$recurse_count) 
    { 
    global $nodes_array; 
    global $recurve_level; 

    if (sizeof($body_elem->children()) > 0); 
     { 

     foreach($body_elem->children() as $each_elem) 
      { 


      echo "<hr/>"; 
      echo $tag_str_name = $tag_str_name . '[' . $each_elem->tag . ']'; 

      $keys = explode('][', trim($tag_str_name, '[]')); 

      print_r($keys); 
     echo $body_elem->tag," == ".$each_elem->tag; 




     //$value = array($each_elem->tag=>""); 


     $value = $each_elem->tag; 


     // setValue($nodes_array,$keys,$value); 

     $nodes_array[$recurse_count][$body_elem->tag] = $value; 


      if($recurse_count<10) 
      { 
      recurve_extract($each_elem, $tag_str_name,$recurse_count+1); 
      } 


      } 
     } 
    } 
    recurve_extract($body_elem, '[body]',1); 
    print_r($nodes_array); 
    echo "</pre>"; 
+0

あなたは関数のコードを追加することができます。 –

+0

@NigelRen done、関数phpコードが追加されました –

答えて

0

私はほとんどあなたが欲しいものを手に入れる必要があり、コードの一部を変換することができた、このかかわらず、各ノードにコンテンツを追加します....

$source = <<< XML 
<html> 
<head> 
    <title> My New Web Page </title> 
</head> 
<body> 
<table> 
    <tr><td><h1> Welcome to My Web Page! </h1></td></tr> 
    <tr><td><div>Menu item 1<div>Menu item 2</div></div></td></tr> 
</table> 
</body> 
</html> 
XML; 

function extractXML($base, SimpleXMLElement $node) 
{ 
    $nodeName = $node->getName(); 
    $childNodes = $node->children(); 
    if (count($childNodes) == 0) { 
     $base[ $nodeName ] = (string)$node; 
    } 
    else { 
     $new = []; 
     foreach ($childNodes as $newNode) { 
      $new[] = extractXML($base, $newNode); 
     } 
     $base[$nodeName] = count($new)>1?$new:$new[0]; 
    } 
    return $base; 
} 

$body_elem = simplexml_load_string($source); 
$nodes_array = extractXML([], $body_elem->body); 
print_r($nodes_array); 

再帰関数は、良いことができますが、あなたあなたが何を渡し、何を返すのかに非常に注意する必要があります。 globalを使用すると混乱が増えますので、自己完結型にしてください。

これまでの内容では、これまでの内容($base)と処理するノード($node)が渡されます。コンテンツをループし、各ノードでサブノードがある場合は同じルーチンを呼び出します。それを開始するには、bodyタグを渡してどこから抽出するかを教えてください。

出力され、我々がそれ自体、それができたら、変更することが容易になりますよう...

Array 
(
    [body] => Array 
     (
      [table] => Array 
       (
        [0] => Array 
         (
          [tr] => Array 
           (
            [td] => Array 
             (
              [h1] => Welcome to My Web Page! 
             ) 
           ) 
         ) 
        [1] => Array 
         (
          [tr] => Array 
           (
            [td] => Array 
             (
              [div] => Array 
               (
                [div] => Menu item 2 
               ) 
             ) 
           ) 
         ) 
       ) 
     ) 
) 
+0

これは大変助かりました。とりあえずありがとう –

0

、親要素の識別子を保存するには、その後、my_array[parent_level1][parent_level2][parent_level_x]にそれを置きます。

+0

parent_level_2にtable - > trや他のtrのような同じキーがあると、同じキーが構造体を破壊します –

関連する問題