如果数组值以。开头

时间:2012-12-20 18:53:43

标签: php

我有一系列值。

我的抓取工具扫描网页并插入所有链接,链接的标题和说明是一个多维数组。

但是现在我有了一个新数组,我只想要链接,描述和标题等,如果它们以数组中的任何值开头($ 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);
}

3 个答案:

答案 0 :(得分:0)

好的,我不完全理解这里的代码。 但我认为$ output数组应该在第一个foreach循环之外声明,每个数组都应该附加到它? 因为从您编写的代码中,只有最后$ link链接的详细信息将存储在$ output

另外,这里的$ data是什么?你用它做什么用?

答案 1 :(得分: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 */
  }
}

答案 2 :(得分: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);