0

当回显而不是仅删除所有其他元标记时,它似乎在重复描述,例如:

BBC 有 13 个不同的元标签,当我只在脚本中回显描述时,它会重复 13 次。

<?php
//make the array 
$TAarray = explode("\n", strip_tags($_POST['TAData'])); 

foreach ($TAarray as $key => &$line) {
            $line = trim($line); 
            // get the meta data for each url
            $tags = get_meta_tags($line);

            echo '<tr>';
            foreach ($tags as $meta)        
            {
            echo (isset($tags['description']))?"<br><br       />\nDescription($line):<br>\n".$tags['description']:"<br>\nDescription($line):<br>\nNo Meta    Description.";
                    /*echo '<td>' . $meta . '</td>';*/
            }
            echo '</tr>';
    }

    ?>

这是任何人都想看到它工作的 URL:http: //php-playground.co.cc/testdir/metaex.php

附言

我知道复选框不起作用,它们仅用于布局

4

3 回答 3

1

您正在遍历元标记,并且对于每个元标记,您都在呼应描述。

摆脱循环。

于 2012-04-11T12:04:47.867 回答
1

我认为这就是你想要做的:

<?php
//make the array 
$TAarray = explode("\n", strip_tags($_POST['TAData'])); 

foreach ($TAarray as $key => &$line) {
            $line = trim($line); 
            // get the meta data for each url
            $tags = get_meta_tags($line);

            echo '<tr>';
            echo (isset($tags['description']))?"<br><br       />\nDescription($line):<br>\n".$tags['description']:"<br>\nDescription($line):<br>\nNo Meta    Description.";
                   echo '<td>' . $tags['description'] . '</td>';
            echo '</tr>';
    }

    ?>

您会注意到已经删除了第二个 for 循环。

于 2012-04-11T12:05:13.683 回答
0

如果您foreach与引用一起使用,最好在循环后删除该引用:

foreach ($TAarray as $key => &$line)
{
    $line = trim($line); 
}
unset($line); # remove the reference for safety reasons

但是由于您不会$TAarray在该代码之后进行迭代,因此该代码无论如何都是多余的。不要编写多余的代码。我建议如下:

//make the array 
$TAarray = explode("\n", strip_tags($_POST['TAData'])); 
$TAarray = array_map('trim', $TAarray);

我建议你把它放到它自己的函数中:

/**
 * @param string $html
 * @return string[] lines
 */
function getTrimmedTextLinesArrayFromHTMLBlock($html)
{
    $text = strip_tags($html);
    $lines = explode("\n", $text);
    $trimmed = array_map('trim', $lines);
    return $trimmed;
}

然后,您可以在任何您认为合适的地方使用它。您还可以使用不同的输入独立测试此功能:

$lines = getTrimmedTextLinesArrayFromHTMLBlock($_POST['TAData']));
$whitelist = array("description");
foreach ($lines as $line)
{
    if (! $tags = get_meta_tags($line)) continue;
    echo '<tr>';
    foreach ($tags as $key => $meta)
    {
        if (! in_array($key, $whitelist)) continue;
        echo '<td>' . $meta . '</td>';
    }
    echo '</tr>';
}

我希望这是有帮助的。

于 2012-04-11T12:06:33.787 回答