【问题标题】:Combined fields into array将字段组合成数组
【发布时间】:2017-02-28 06:25:00
【问题描述】:

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

$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'],则循环时只获得最后一行。

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

【问题讨论】:

    标签: php arrays json web-crawler


    【解决方案1】:

    如下所示:-

    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> ----------------";
    }
    

    【讨论】:

    • @vanloc 很高兴为您提供帮助:):)
    【解决方案2】:
    $arrayofcol=array(1=>"link",2=>"title",3=>"desc");
    $title=$desc=$link;
    $result = array();
    $data=$arrayofcol[1];
    
    $new_program=$$data;
    
    print_r($new_program);
    

    你会得到预期的结果。

    【讨论】:

    • 不,伙计。它适用于单维数组,但不适用于多维数组。尝试用一些硬编码值检查它
    • 喜欢@Anant 评论。你应该编辑你的答案。谢谢。
    • 如果可能的话,请你把 $url ($doc->loadHTMLFile($url); ) 的链接发给我,这样我可以检查..
    • @AvinashRaut:$url = "http://giaitri.vnexpress.net/"$linkPath &amp; $titlePath = "//*[@id='news_home']/li/h3/a[1]"$desc = "'//*[@class="block_image_news width_common"]/div[2]'".
    • @vanloc :请查看已编辑的答案,这对您有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-14
    • 2012-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-28
    相关资源
    最近更新 更多