php 7.4 PHPOffice/PHPExcel 解析数据问题

615 阅读1分钟

简单说就是 php7.4不能对数字进行下标访问

报错原因:访问类型为 null 的值的 数组下标 7.2中是没问题的,7.4中对语法规范性更为严谨 尝试将 null,bool,int,float 或 resource 类型的值用作数组 ( 例如 $null[“key”] ) 会产生一个通知

  • 解决方法 将php版本改为7.2 或升级 依赖,或将源代码改动
/*
报错原因:访问类型为 null 的值的 数组下标 7.2中是没问题的,7.4中对语法规范性更为严谨
尝试将 nullboolintfloat 或 resource 类型的值用作数组 ( 例如 $null[“key”] ) 会产生一个通知
! 解决方法 将php版本改为7.2 或升级 依赖,或将源代码改动
 */
/**
 * DataType for value
 *
 * @param   mixed  $pValue
 * @return  string
 */
public static function dataTypeForValue($pValue = null)
{
    // Match the value against a few data types
    if ($pValue === null) {
        return PHPExcel_Cell_DataType::TYPE_NULL;
    } elseif ($pValue === '') {
        return PHPExcel_Cell_DataType::TYPE_STRING;
    } elseif ($pValue instanceof PHPExcel_RichText) {
        return PHPExcel_Cell_DataType::TYPE_INLINE;
    } elseif (is_bool($pValue)) {
        return PHPExcel_Cell_DataType::TYPE_BOOL;
    } elseif (is_float($pValue) || is_int($pValue)) {
        return PHPExcel_Cell_DataType::TYPE_NUMERIC;
    } elseif (preg_match('/^[\+\-]?([0-9]+\\.?[0-9]*|[0-9]*\\.?[0-9]+)([Ee][\-\+]?[0-2]?\d{1,3})?$/', $pValue)) {
        $tValue = ltrim($pValue, '+-');
        if (is_string($pValue) && $tValue{0} === '0' && strlen($tValue) > 1 && $tValue{1} !== '.') {
            return PHPExcel_Cell_DataType::TYPE_STRING;
        } elseif ((strpos($pValue, '.') === false) && ($pValue > PHP_INT_MAX)) {
            return PHPExcel_Cell_DataType::TYPE_STRING;
        }
        return PHPExcel_Cell_DataType::TYPE_NUMERIC;
    } elseif (is_string($pValue) && array_key_exists($pValue, PHPExcel_Cell_DataType::getErrorCodes())) {
        return PHPExcel_Cell_DataType::TYPE_ERROR;
    }
    elseif ($pValue{0} === '=' && strlen($pValue) > 1) {
        return PHPExcel_Cell_DataType::TYPE_FORMULA;
    } 

    return PHPExcel_Cell_DataType::TYPE_STRING;
}