2012-05-02 6 views
0

DOM/Xpath로 일부 HTML을 구문 분석하고 있습니다. 궁극적으로는 쿼리로 가져온 데이터로 .CSV 파일을 생성하는 것이 목표입니다.PHP + XPath + fputcsv - 배열에 데이터 저장

현재 코드는 작동하지만 마지막 제품 이름 만 반환합니다. 나는 여기서 일종의 오른쪽 트랙에 일종의 알고 있지만, 나는 이것을 무시할 수 없다. 어떤 도움이라도 대단히 감사하겠습니다. 감사.

$names = array(); 
$result = $xpath->query("//div[@class='product-name']"); 
foreach ($result as $nam) { 
$names[] = $nam->nodeValue; 
$i = 0; 
$values=$names[$i] = $nam->nodeValue; 
} 

$list = array (
    array('Product Name','Stock Level','Price'), 
    array($values, '456', '789'), 
); 

$fp = fopen('product-sheet.csv', 'w'); 

foreach ($list as $fields) { 
    fputcsv($fp, $fields); 
} 

fclose($fp); 

답변

1

당신이 달성하려고하는지 전혀 모르겠지만 희망이 얻을 것이다 당신은 당신의 목표에 더 가깝습니다.

<?php 

     //mocked up input, substitute for your HTML source 
     $input = "<html> 
        <div class='product-name'>test1</div> 
        <div class='product-name'>test2</div> 
        <div class='product-name'>test3</div> 
        <div class='product-name'>test4</div> 
        <div class='product-name'>test5</div> 
       </html>"; 

     $doc = new DOMDocument(); 
     @$doc->loadHTML($input); 
     libxml_use_internal_errors(FALSE); 
     $xpath = new DomXPath($doc); 

     $list = array (
      array('Product Name','Stock Level','Price') 
     ); 

     $result = $xpath->query("//div[@class='product-name']"); 

     foreach ($result as $nam) { 
      $value = $nam->nodeValue; 
      $list[] = array($value, '456', '789'); //Appends an array to the lists array 
     } 

     $fp = fopen('product-sheet.csv', 'w'); 

     foreach ($list as $fields) { 
      fputcsv($fp, $fields); 
     } 

     fclose($fp); 

    ?> 
1

문제는 루프 내에서 $ i를 설정하고 있다는 것입니다. 각 반복에

foreach ($result as $nam) { 
$names[] = $nam->nodeValue; 
$i = 0; 
$values=$names[$i] = $nam->nodeValue; 
} 

은 $ 나는이 대신 같은 것을보십시오 0으로 리셋되고 있습니다 :

for($i=0; $i< count($result); $i++) { 
    $names[] = $result->nodeValue; 
    $values=$names[$i] = $result->nodeValue; 
} 
+0

나는 당신이 뭘 하려는지 확실하지 않습니다. 당신의 목표를 자세하게 설명해 주시겠습니까? 특히 배열에 관해서는; 어떻게 구조화되기를 원하십니까? – IsisCode