2012-05-02 1 views
0

Я разбираю HTML-код с DOM/Xpath с конечной целью создания файла .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