2

以下のスクリプトには配列があります。私の配列には、Web ページのすべてのリンク、タイトル、および説明が格納されています。しかし、説明がない場合は、動作する関数を使用して ap タグの最初の 20 文字を使用することを確認したいと思います。唯一の問題は、ジグソーパズルのピースを持っていて、それらをまとめることができないように見えることです。そのため、説明が空の場合は、の代わりに関数 getWord を使用することを if ステートメントで示したいと思いますgetMetas()

function getMetas($link) {
  $str1 = file_get_contents($link);    
  if (strlen($str1)>0) {
    preg_match_all( '/<meta.*?name=("|\')description("|\').*?content=("|\')(.*?)("|\')/i', $str1, $description);
    if (count($description) > 1) {
      return $description[4];   
    }
  }
}

次に、私の関数はここ ( get_custom_excert) に入りますが、動作することがわかっているので、それを見る必要はありません。

function getWord() {
  $html = file_get_contents($link);    
  preg_match('%(<p[^>]*>.*?</p>)%i', $html, $re);
  $res = get_custom_excerpt($re[1]);
}

$outputs = array();

foreach ($links as $thisLink) {
  $output[] = array("link" => $thisLink, "title" => Titles($thisLink), "description" => getMetas($thisLink));

  if ($output['description'] == null) {
  $output['description'] = getWord($res);
  }

  $outputs[] = $output;
}

print_r($output);
4

2 に答える 2

0

これはあなたが望むものですか?

function getMetas($link) {
  $str1 = file_get_contents($link);    
  if (strlen($str1)>0) {
    preg_match_all( '/<meta.*?name=("|\')description("|\').*?content=("|\')(.*?)("|\')/i', $str1, $description);
    if (count($description) > 1) {
      return $description[4];   
    } else {
      return getWord($str1);
    }
  }
}

function getWord($html) {
  preg_match('%(<p[^>]*>.*?</p>)%i', $html, $re);
  return get_custom_excerpt($re[1]);
}

ところで、正規表現を使用したHTMLの解析は非常に壊れやすいため、DOMパーサーライブラリを使用することをお勧めします。

于 2012-09-25T17:44:55.960 に答える
0

これはどのように?

foreach ($links as $thisLink) {
  $output = array("link" => $thisLink, "title" => Titles($thisLink), "description" => getMetas($thisLink));

  if ($output['description'] == null) {
  $output['description'] = getWord($res);
  }

  $outputs[] = $output;
}
于 2012-09-25T17:02:54.203 に答える