2

このコードを使用して、HTMl コンテンツからすべての URL リンクを分離しています

$doc = new DOMDocument();
$doc->loadHTML($string);
$anchorTags = $doc->getElementsByTagName('a');
$links = array();
foreach ($anchorTags as $url) {
    $source = parse_url($url->getAttribute('href'));
    $source = preg_replace('/^www\./', '', $source['host']);
    $links[$source][$url->getAttribute('href')] = $url->nodeValue;
}

上記のコードで出力します。

Array
(
    [Facebook] => Array
                (
                    [facebook.com] => https://www.facebook.com/
                )

    [Google] => Array
                (
                    [google.com] => https://www.google.com/
                )

    [] => Array
        (
            [] =>
         )

    [yahoo] => Array
            (
                [yahoo.com] => https://www.yahoo.com/
            )

)

このために配列からnull/空白の要素/インデックス/キーを削除したいだけです。私はarray_filter()を使用しています。

しかし、解決には至りません。

print_r(array_filter($links));
4

4 に答える 4

2

値をチェックするための条件を追加するだけです:

$links = array();
foreach ($anchorTags as $url) {
    $source = parse_url($url->getAttribute('href'));
    $source = preg_replace('/^www\./', '', $source['host']);
    if($source != null && $source != "" && $url->nodeValue != null && $url->nodeValue != ""){
         $links[$source][$url->getAttribute('href')] = $url->nodeValue;
    }
}
于 2013-08-22T07:34:47.710 に答える
1

または、もう少しエレガントに、空の場合は結果を配列にプッシュしないでください。

if ($source != "") $links[$source][$url->getAttribute('href')] = $url->nodeValue;
于 2013-08-22T07:33:21.300 に答える
0

このようにstrlenを確認できます

print_r(array_filter($links, 'strlen' ));

于 2013-08-22T07:33:25.353 に答える