我有一个数组。
在我的数组中是我脚本的最后一部分。我的脚本扫描所有链接并放入数组$ link。然后它扫描$ link中的所有标题,然后获取$ link的所有元标题。但是后来有些人没有元描述,所以我决定创建一个函数,返回20个字符的p标签扫描。
虽然在我的数组中,我的if语句似乎不起作用。它应该检测变量中'description'键中是否有任何输入,然后使用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语句之外,代码工作正常。该函数已在较小的数组上执行,而不是我正在使用的数组,并且它已将结果返回到我的标准。但它似乎创建了另一个键('description'),而不是添加p标签。有什么想法吗?
答案 0 :(得分: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;
}