将字段组合成数组

时间:2017-02-28 06:25:01

标签: php arrays json web-crawler

我有一个抓取数据的代码 -

$doc = new DOMDocument();
$internalErrors = libxml_use_internal_errors(true);

$doc->loadHTMLFile($url);

// Restore error level
libxml_use_internal_errors($internalErrors);
$xpath = new DOMXpath($doc);
$result=array();

$link = $xpath->query($linkPath);
$title = $xpath->query($titlePath);
$desc = $xpath->query($descPath);

for ($i=0; $i < $link->length; $i++) { 
        if (!is_null($link)) {
                $result['link'][] = $link[$i]->getAttribute('href');
        }

        if (!is_null($title)) {
                $str = $title[0]->nodeValue;
                $result['title'][] = $title[$i]->nodeValue;
        }

        if (!is_null($desc)) {
                $str = $desc[0]->nodeValue;
                $result['desc'][] = $desc[$i]->nodeValue;
        }
        echo "<br> ----------------";
}

print_r($result);

结果如:

<br> ----------------
<br> ----------------
<br> ----------------
<br> ----------------
<br> ----------------
Array
(
    [link] =&gt; Array
        (
            [0] =&gt; http://1.com
            [1] =&gt; http://2.com
            [2] =&gt; http://3.com
        )

    [title] =&gt; Array
        (
            [0] =&gt; Lorem ipsum dolor sit amet
            [1] =&gt; Lorem ipsum dolor sit amet
            [2] =&gt; Lorem ipsum dolor sit amet
        )

    [desc] =&gt; Array
        (
            [0] =&gt; Lorem ipsum dolor sit amet
            [1] =&gt; Lorem ipsum dolor sit amet
            [2] =&gt; Lorem ipsum dolor sit amet
        )

)

但我想要的结果如下:

Array
(
    [0] =&gt; Array 
    (
        [link] =&gt; http://1.com
        [title] =&gt; Lorem ipsum dolor sit amet
        [desc] =&gt; Lorem ipsum dolor sit amet
    )
    <br> ----------------
    [1] =&gt; Array 
    (
        [link] =&gt; http://2.com
        [title] =&gt; Lorem ipsum dolor sit amet
        [desc] =&gt; Lorem ipsum dolor sit amet
    )
    <br> ----------------
    [2] =&gt; Array 
    (
        [link] =&gt; http://3.com
        [title] =&gt; Lorem ipsum dolor sit amet
        [desc] =&gt; Lorem ipsum dolor sit amet
    )
    <br> ----------------
)

我使用$result['field'][],如果使用result['field']仅在循环时获得最终行。

我不知道如何像格式之前一样保存数据。 我需要像这样的数组显示,因为每个数组都是新闻。

2 个答案:

答案 0 :(得分:2)

如下所示: -

for ($i=0; $i < $link->length; $i++) { 
    if (!is_null($link)) {
        $result[$i]['link'] = $link[$i]->getAttribute('href'); // will produce like $result[0]['link']
    }

    if (!is_null($title)) {
        $str = $title[0]->nodeValue;
        $result[$i]['title'] = $title[$i]->nodeValue;// will produce like $result[0]['title']
    }

    if (!is_null($desc)) {
        $str = $desc[0]->nodeValue;
        $result[$i]['desc'] = $desc[$i]->nodeValue;// will produce like $result[0]['index']
    }
    echo "<br> ----------------";
}

答案 1 :(得分:0)

$arrayofcol=array(1=>"link",2=>"title",3=>"desc");
$title=$desc=$link;
$result = array();
$data=$arrayofcol[1];

$new_program=$$data;

print_r($new_program);

你会得到预期的结果。