2012-05-02 4 views
0

Je suis en train d'analyser du code HTML avec DOM/Xpath, dans le but ultime de générer un fichier .CSV avec les données que j'ai saisies avec mes requêtes.PHP + XPath + fputcsv - Stocker des données dans des tableaux

Le code actuel ci-dessous fonctionne, mais ne renvoie que le dernier nom de produit. Je sais que je suis sorte de sur la bonne voie ici, mais je suis au maximum et ne peut pas comprendre cela. Toute aide serait grandement, grandement appréciée. Merci.

$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); 

Répondre

1

Je ne suis pas tout à fait sûr de ce que vous essayez de réaliser, mais nous espérons que cela obtiendrai vous plus proche de votre objectif.

<?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

Le problème est que vous définissez $ i dans votre boucle.

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

A chaque itération, $ i est d'être remis à 0. Essayez quelque chose comme ceci:

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

Je ne suis pas sûr de ce que vous essayez de faire désolé. Pourriez-vous décrire votre objectif en détail s'il vous plaît? Plus précisément en ce qui concerne ces tableaux; comment voulez-vous qu'ils soient structurés? – IsisCode

Questions connexes