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 완료, 함수 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

덕분에이 점이 도움이되었습니다. js에 코드가 있다고 생각합니다. 어쨌든 감사합니다 –

0

, 다음, 부모 요소의 식별자를 저장, my_array[parent_level1][parent_level2][parent_level_x]에 넣어.

는 나는 거의 당신이 원하는 것을 얻을 내가해야하는 코드의 일부를 변환하기 위해 관리했습니다
+0

parent_level_2에 table -> tr과 같은 키가 있으면 다른 tr, 같은 키가 구조체를 파손합니다. –