Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 分隔符有效时的explode()偏移量和分隔符警告_Php - Fatal编程技术网

Php 分隔符有效时的explode()偏移量和分隔符警告

Php 分隔符有效时的explode()偏移量和分隔符警告,php,Php,我花了很长时间想弄清楚到底发生了什么。我有一段代码抛出了一些错误。在警告和通知之外,代码工作正常,数组不是空的。但为什么我会收到这些警告和通知,这让我很烦恼。在我的测试环境中,我没有得到错误,但是当放在不同的服务器上时,它们会立即弹出。我不明白为什么。抛出错误的代码行和抛出的错误如下 $libTitle = explode($libYearRes[0], $value); Notice: Undefined offset: 0 Warning: explode(): Empty deli

我花了很长时间想弄清楚到底发生了什么。我有一段代码抛出了一些错误。在警告和通知之外,代码工作正常,数组不是空的。但为什么我会收到这些警告和通知,这让我很烦恼。在我的测试环境中,我没有得到错误,但是当放在不同的服务器上时,它们会立即弹出。我不明白为什么。抛出错误的代码行和抛出的错误如下

 $libTitle = explode($libYearRes[0], $value);
 Notice: Undefined offset: 0 
 Warning: explode(): Empty delimiter

 $sortLibYearRes = explode(' ', $libYearRes[0]);
 Notice: Undefined offset: 0

 $libMovieRes = $sortLibYearRes[1];
 Notice: Undefined offset: 1
整个代码块如下所示,其中的问题行用@表示

 function checkMovieLibrary($movieTitle,$movieLibrary){

   foreach ($movieLibrary as $value) {
      preg_match('/\(\d\d\d\d\)\s\d\d\d*[Pp]/', $value, $libYearRes);
      $libTitle = @explode($libYearRes[0], $value);
      $libMovieTitle = rtrim($libTitle[0]);
      $sortLibYearRes = @explode(' ', $libYearRes[0]);
      //list($libMovieYear,$libMovieRes) = explode(' ', $libYearRes[0], 2);
      $libMovieYear = $sortLibYearRes[0];
      $libMovieRes = @$sortLibYearRes[1];

      preg_match('/\(\d\d\d\d\)\s\d\d\d*[Pp]/', $movieTitle, $newfileYearRes);
      $newFileTitle_array = explode($newfileYearRes[0], $movieTitle);
      $newFileTitle = rtrim($newFileTitle_array[0]);
      $sortFileYearRes = explode(' ', $newfileYearRes[0]);
      $newFileMovieYear = $sortFileYearRes[0];
      $newFileMovieRes = $sortFileYearRes[1];

      if(stripos($libMovieTitle.' '.$libMovieYear, $newFileTitle.' '.$newFileMovieYear) !== false){
          $moviesList_array[] = array('OriginalFile' => $value, 'NewFile' => $movieTitle);
          return($moviesList_array);

      }
  }
  return false;

}

//$movieTitle = "10 Cloverfield Lane (2016) 1080p.mkv"; //This is an example of $movieTitle string
//$movieLibrary = array('10 Cloverfield Lane (2016) 1080p.mkv','The Goonies (1985) 1080p.mp4'); this is an example of the $movieLibrary array

$doesMovieExist = checkMovieLibrary($Movie,$movieLibrary);

if(is_array($doesMovieExist) && $doesMovieExist !== false){
    foreach($doesMovieExist as $fileKey => $fileValue) {
        $originalFile = $fileValue['OriginalFile'];
        $newFile = $fileValue['NewFile'];
    }

   //do some stuff here
 }

未定义的偏移量错误意味着您引用的数组键不存在。如果您希望在处理数组之前查看它,请使用variable dump(var_dump),然后您将看到这些数组键对于给定场景不可用

通过使用isset函数检查数组键是否确实存在,可以避免此错误。举例来说

if(isset($libYearRes[0])){ // will be true only if $libYearRes[0] is exist
    $libTitle = explode($libYearRes[0], $value);
}
首先不要使用,因为它会绕过错误消息。所以用户
错误报告(E\u ALL)
直到开发阶段

然后你会得到未定义的偏移量,这意味着你的数组是空的,不存在,所以请设置一个条件来检查它是否存在,然后分解应该可以工作。一定是这样的:

if(!empty($libYearRes[0]) || isset($libYearRes[0])) {
     $libTitle = @explode($libYearRes[0], $value);
}

你在哪里申报$Sortlibyeare的价值?这是第6行代码