0

値の配列があります。

私のクローラーはWebページをスキャンし、すべてのリンクを挿入します。リンクのタイトルと説明は多次元配列です。

しかし今、私は新しい配列を持っており、それらが配列内の任意の値($ bbc_values)で始まる場合にのみ、リンク、説明、タイトルなどが必要です。

しかし、私はこれを行う方法を本当に知りません。私は実際のコードに関してかなり遠くまで到達しましたが、誰かが私に何かアイデアを与えることができますa)私のコードが機能しない理由b)私の問題の提案?

$bbc_values = array('http://www.bbc.co.uk/news/health-', 'http://www.bbc.co.uk/news/politics-', 'http://www.bbc.co.uk/news/uk-', 'http://www.bbc.co.uk/news/technology-',  'http://www.bbc.co.uk/news/england-', 'http://www.bbc.co.uk/news/northern_ireland-', 'http://www.bbc.co.uk/news/scotland-', 'http://www.bbc.co.uk/news/wales-', 'http://www.bbc.co.uk/news/business-', 'http://www.bbc.co.uk/news/education-', 'http://www.bbc.co.uk/news/science_and_enviroment-', 'http://www.bbc.co.uk/news/entertainment_and_arts-', 'http://edition.cnn.com/');


foreach ($links as $link) {
    $output = array(
        "title"       => Titles($link), //dont know what Titles is, variable or string?
        "description" => getMetas($link),
        "keywords" => getKeywords($link), 
        "link"        => $link                 
    );

    if (empty($output["description"])) {
        $output["description"] = getWord($link);
    }
}
$data = implode( " , ", $output['link']);
foreach ($output as $new_array) {
    if (in_array($output, $bbc_values)) {
    $news_stories[] = $new_array;
}

var_dump($news_stories);
}
4

3 に答える 3

0

さて、私はここのコードを完全には理解していません。しかし、最初の foreach ループの外で $output 配列を宣言し、各配列をそれに追加する必要があると思いますか? あなたが書いているコードから、最後の $link の詳細のみが $output 内に保存されるためです

また、ここで $data とは何ですか? あなたは何のためにそれを使用していますか?

于 2012-12-20T19:04:14.730 に答える
0

正規$bbc_values表現に変換します。

$bbc_re = '/^('.implode('|', array_map('quotemeta', $bbc_values)).')/';

次に、この正規表現を使用してリンクをフィルタリングします。

foreach ($links as $link) {
  if (preg_match($bbc_re, $link)) {
    /* Do stuff with $link */
  }
}
于 2012-12-20T19:06:11.227 に答える
0

あなたが望むのは、 のリンクで始まるリンクを含む配列と、さらにすべてのリンクのコンマ区切りリストをbbc_values含む文字列を持つことだと思います。$dataこれを試してください:

<?php

$bbc_values = array('http://www.bbc.co.uk/news/health-', 'http://www.bbc.co.uk/news/politics-', 'http://www.bbc.co.uk/news/uk-', 'http://www.bbc.co.uk/news/technology-',  'http://www.bbc.co.uk/news/england-', 'http://www.bbc.co.uk/news/northern_ireland-', 'http://www.bbc.co.uk/news/scotland-', 'http://www.bbc.co.uk/news/wales-', 'http://www.bbc.co.uk/news/business-', 'http://www.bbc.co.uk/news/education-', 'http://www.bbc.co.uk/news/science_and_enviroment-', 'http://www.bbc.co.uk/news/entertainment_and_arts-', 'http://edition.cnn.com/');

$news_stories = array();
$all_links = array();
$news_links = array();

foreach ($links as $link) {
    $item = array(
        "title"       => Titles($link), 
        "description" => getMetas($link),
        "keywords" => getKeywords($link), 
        "link"        => $link                 
    );

    if (empty($item["description"])) {
        $item["description"] = getWord($link);
    }


    foreach($bbc_values as $bbc_value) {
        // note the '===' . this is important
        if(strpos($item['link'], $bbc_value) === 0) {
            $news_stories []= $item;
            $news_links []=$item['link'];
            break;
        }
    }

    $all_links[] = $item['link'];
}

$data_all_links = implode(' , ', $all_links);
$data_news_links = implode(' , ', $news_links);
var_dump($news_stories);
于 2012-12-20T19:07:31.600 に答える