PHP + XPath + fputcsv - Almacenamiento de datos en matrices

Estoy analizando algo de HTML con DOM/Xpath, con el objetivo final de generar un archivo .CSV con los datos que obtuve con mis consultas.

El código actual a continuación funciona, pero solo devuelve el último nombre del producto. Sé que soy tipo de en el camino correcto aquí, pero estoy al máximo y no puedo resolver esto. Cualquier ayuda sería muy, muy apreciada. Gracias.

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

preguntado el 02 de mayo de 12 a las 19:05

2 Respuestas

No estoy completamente seguro de lo que está tratando de lograr, pero espero que esto lo acerque más a su objetivo.

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

    ?>

contestado el 02 de mayo de 12 a las 21:05

El problema es que estás configurando $i dentro de tu ciclo.

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

En cada iteración, $i se restablece a 0. Pruebe algo como esto en su lugar:

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

contestado el 02 de mayo de 12 a las 20:05

No estoy seguro de lo que estás tratando de hacer, lo siento. ¿Podría describir su objetivo en detalle, por favor? Específicamente con respecto a esas matrices; ¿Cómo quieres que estén estructurados? - IsisCode

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.