0

私は配列を持っています。

私の配列には、スクリプトの最後の部分があります。私のスクリプトはすべてのリンクをスキャンし、配列 $link に入れます。次に、$link 内のすべてのタイトルをスキャンし、$link のすべてのメタ タイトルを取得します。しかし、一部の人々はメタ ディスクリプションを持っていないので、スキャンされた 20 文字の ap タグを返す関数を作成することにしました。

私の配列ではありますが、if ステートメントが機能していないようです。変数の「説明」キーに入力があるかどうかを検出し、if ステートメントの命令を使用することになっています。

しかし、それはそうではないようで、何かが足りないと思い続けています。

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

    }


}

function get_custom_excerpt($return, $option = 30, $sentance = false) {
    $marks = Array(".","!","?");

    $return = strip_tags($return);

    if($sentance == true) {
        $start = implode(" ", array_slice(preg_split("/\s+/", $return), 0, $option ));
        $start .= ' ';
        $end = implode(" ", array_slice(preg_split("/\s+/", $return), $option));

        $cut = Array();
        foreach($marks AS $m => $mark){
            $mark = strpos($end, $mark);
            if($mark != false) $cut[$m] = $mark;
        }

        if($cut[0] != "")
            $chop = min($cut);
        else
            $chop = $option;
        $rest = substr($end, 0, $chop);

        $key = array_search($chop, $cut);

        $return = $start.$rest;

    }else{
        $return = implode(" ", array_slice(preg_split("/\s+/", $return), 0, $option));
    }
    $return .= $marks[$key];

    return $return; 
}     


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


$out = Array();

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

    if (empty($out['description'])) {
        $out['description'] = $res;
    }

    $output[] = $out;

}

ちなみに、コードは if ステートメントを除いて完全に機能します。関数は、私が使用している配列ではなく、より小さな配列で実行され、標準に結果を返しました。しかし、p タグを追加する代わりに、別のキー (「説明」) を作成しているようです。何か案は?

4

1 に答える 1

0

問題は、配列を $output 配列に追加していることです。そのため、追加したばかりの配列にアクセスしようとすると、実際には $output 配列全体にアクセスすることになります。これを試して:

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

    if (empty($out['description'])) {
        $out['description'] = $res;
    }

    $output[] = $out;
}
于 2012-09-24T22:18:54.670 に答える