什么意味着未定义的偏移问题?

时间:2018-03-26 08:05:25

标签: php search

我无法弄清楚此代码中的错误以及如何解决此错误。

报告的错误是:

注意:未定义的偏移量:第53行的/Applications/XAMPP/xamppfiles/htdocs/bat/rd-search.php中的1是这段代码:

$final_result[$file_count]['page_title'][] = $page_title[1]; 

代码是:

  $contents = file_get_contents($file);
  preg_match("/\<title\>(.*)\<\/title\>/", $contents, $page_title); //getting page title
  if (preg_match("#\<body.*\>(.*)\<\/body\>#si", $contents, $body_content)) { //getting content only between <body></body> tags
    $clean_content = strip_tags($body_content[0]); //remove html tags
    $clean_content = preg_replace('/\s+/', ' ', $clean_content); //remove duplicate whitespaces, carriage returns, tabs, etc

    $found = strpos_recursive(mb_strtolower($clean_content, 'UTF-8'), $search_term);

    $final_result[$file_count]['page_title'][] = $page_title[1]; 
    $final_result[$file_count]['file_name'][] = preg_replace("/^.{3}/", "\\1", $file);
  }

  for ($j = 0; $j < count($template_tokens); $j++) {
    if (preg_match("/\<meta\s+name=[\'|\"]" . $template_tokens[$j] . "[\'|\"]\s+content=[\'|\"](.*)[\'|\"]\>/", $contents, $res)) {
      $final_result[$file_count][$template_tokens[$j]] = $res[1];
    }
  }

1 个答案:

答案 0 :(得分:0)

这是因为preg_match没有返回匹配项。

您可以通过在下方添加一行来解决此问题,例如:

preg_match("/\<title\>(.*)\<\/title\>/", $contents, $page_title); //getting page title
$page_title = empty($page_title) ? [0 => '', 1 => ''] : $page_title;

如果preg_match无法获得标题的任何匹配,这将只创建一个0和1作为索引的数组。

另一种方法是在尝试访问它之前检查$page_title的值。这种方法意味着每次要访问此变量时都必须创建一个检查,而第一种方法则不会,因为索引具有空值。

if (!empty($page_title) {
    $final_result[$file_count]['page_title'][] = $page_title[1];
}