PHP list() 错误:"Undefined offset"



我所处理的系统会将任何意外错误以字符串形式发送回我,其中包含错误类型、消息和详细信息,例如:

Error Type - Database
Error Message - Error Executing Database Query.
Error Detail - [Macromedia][SQLServer JDBC Driver][SQLServer]String or binary data would be truncated. 

现在,为了创建一个更好的UI,我应该处理这些错误,所以我考虑了explode(),并在PHP手册中找到了这个用户的响应,它帮助我用两个分隔符而不是一个分隔符来分隔结果:

然后我需要更深入地了解代码,因为我想要$key=>val对,所以我在StackOverflow上找到了这个答案。

然后我把两者结合起来,找到了这个解决方案:

private function string_to_array( $delimiters, $string )
{
// start by replacing the $delimiters
$ready = str_replace( $delimiters, $delimiters[0], $string );

// create new list() item:
// $key => $value
list( $err_typ,     $err_typ_cont,
$err_mess,    $err_mess_cont,
$err_det,     $err_det_cont ) = explode( $delimiters[0], $ready ); # line 238

$result[ trim( $err_typ ) ]     = trim ( $err_typ_cont );
$result[ trim( $err_mess ) ]    = trim ( $err_mess_cont );
$result[ trim( $err_det ) ]     = trim ( $err_det_cont );

return $result;
}

要调用函数,我使用array('-', PHP_EOL)作为$delimiters,而$string是作为string的错误消息


当我在字符串中插入一个随机错误并调用函数时,它运行得非常好。然而,当我从服务器触发随机错误时,我开始遇到问题,特别是list()函数的Undefined offset

PHP错误

<br />
<b>Notice</b>:  Undefined offset: 5 in <b>C:xampphtdocsapplication_backendclassclass.program.php</b> on line <b>238</b><br />
<br />
<b>Notice</b>:  Undefined offset: 4 in <b>C:xampphtdocsapplication_backendclassclass.program.php</b> on line <b>238</b><br />

此外,请注意,这个数组非常奇怪和错误:

数组格式的响应

Array
(
[Error Type] => Database
Error Message
[Error Executing Database Query.
Error Detail] => [Macromedia][SQLServer JDBC Driver][SQLServer]String or binary data would be truncated.
[] => 
)

这与我在上面看到的错误相同。

我该怎么解决?我在这里错过了什么?

您正在处理的系统显然使用了与运行PHP脚本的系统不同的换行符。我建议你处理所有类型的换行符:

$delimiters = array('-', "rn", "n", "r");

最新更新