1

私は、私が書いている Web クローラーの最後のストリップにいます。

Web クローラーは BBC ニュースをクロールし、リンクをタイトルや説明などと共にデータベースに挿入します。すべて機能しますが、すべての開始 URL の配列があるため、それらのいずれかで始まるリンクのみが挿入されます。

foreach を使用して、すべてのリンクの配列のすべての配列変数をループし、それらが基準に一致するかどうかを確認し、新しい配列に挿入してから、それを文字列に内破してから mysql データベースに挿入しています。

ただし、内破関数に関してエラーが表示されます。ハマった。

    $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/world-', '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);
}

    foreach ($output as $new_array) {
if (in_array($new_array['link'], $bbc_values)) {
    $news_stories[] = $new_array;
}
     }



 $data = '"' . implode('" , "', $news_stories) . '"';
 $result = mysql_query("INSERT INTO news_story (`title`, `description`, `keywords`, `link`) VALUES (" . $data . ")");
4

2 に答える 2

0

あなたのforeachループの中にあなたは

$news_stories[] = $new_array;

配列の配列を生成します次のようなものかもしれません

array(
    array(
        'title'=>'title1',
        'description'=>'description1',
        'keywords'=>'keywords1',
        'link'=>'link1'
    ),
    array(
        'title'=>'title2',
        'description'=>'description2',
        'keywords'=>'keywords2',
        'link'=>'link2'
    )
);

そしてあなたはimplodeこのようにループの外側を使用しています

$data = '"' . implode('" , "', $news_stories) . '"';

配列にインデックスを指定しない限り、これは機能しないはずです。したがって、次のコードを使用する場合

$data='"' . implode('" , "', $news_stories[0]) . '"';
echo $data;

次に、配列から最初の配列項目を内包し、$news_stories次のように生成します

"title1" , "description1" , "keywords1" , "link1"

以下を制作したい場合

$result = mysql_query("INSERT INTO news_story (`title`, `description`, `keywords`, `link`) VALUES ('title1' , 'description1' , 'keywords1' , 'link1')");

その後、あなたは使用することができます

$data="'" . implode("' , '", $news_stories[0]) . "'";

だからあなたが書くなら

$result = mysql_query("INSERT INTO news_story (`title`, `description`, `keywords`, `link`) VALUES (" . $data . ")");

それからそれは生産します

$result = mysql_query("INSERT INTO news_story (`title`, `description`, `keywords`, `link`) VALUES ('title1' , 'description1' , 'keywords1' , 'link1')");
于 2012-12-19T18:33:03.810 に答える
0

まず、$links定義されていません。ということ$bbc_valueですか?

それ以外の場合は、最初の foreach を閉じる必要があります (終了があり}ません)

于 2012-12-19T18:21:31.423 に答える