0

当我尝试执行我的代码时收到以下错误。

Notice (8): Undefined offset:  18 [APP/libs/excel_adapters/coverage.php, line 12]
Notice (8): Undefined offset:  23 [APP/libs/excel_adapters/coverage.php, line 13]
Notice (8): Undefined offset:  24 [APP/libs/excel_adapters/coverage.php, line 14]
Notice (8): Undefined offset:  25 [APP/libs/excel_adapters/coverage.php, line 15]
Notice (8): Undefined offset:  26 [APP/libs/excel_adapters/coverage.php, line 16]
Notice (8): Undefined offset:  14 [APP/libs/excel_adapters/coverage.php, line 17]
Notice (8): Undefined offset:  14 [APP/libs/excel_adapters/coverage.php, line 18]

话虽如此,此代码用于将电子表格上传到数据库。我认为我的问题在于 $s 变量。如果有人愿意看看我的代码并告诉我我的问题是什么。我认为一双新的眼睛会对我有很大帮助。

      <?php 
      class CoverageExcelAdapter {

    public function extract($s, $args = array()) { 
    App::import('component', 'CakeSession');        
    $userId = CakeSession::read('Auth.User.id');        
    $ret = array();

    $ret['Coverage'] = array(
        'name' => $s[0][12][3], 
        'effective_date' => $this->Date->formatDate($s[0][18][3]),
        'expiration_date' => $this->Date->formatDate($s[0][18][6]),
        'broker_first_name' => ucwords($s[0][23][3]),
        'broker_middle_initial' => strtoupper(substr($s[0][24][3], 0, 1)),
        'broker_last_name' => ucwords($s[0][25][3]),
        'broker_suffix' => ucwords($s[0][26][3]),
        'producing_id' => $this->State->stateStrToId($s[0][14][3]), 
        'filing_id' => $this->State->stateStrToId($s[0][14][6]),

这是我的 var 转储....

array(1) {
    [0]=> array(1) {
        [0]=> array(41) {
            [0]=> string(13) "ProcessorName"
            [1]=> string(10) "BranchCode"
            [2]=> string(9) "FileTaxID"
            [3]=> string(9) "FileState"
            [4]=> string(11) "FileLicense" [5]=> string(5) "First" [6]=> string(6) "Middle" [7]=> string(12) "Company_Last" [8]=> string(11) "InsuredName" [9]=> string(12) "RiskLocation" [10]=> string(14) "UnderwritingCo" [11]=> string(10) "Home State" [12]=> string(8) "PolicyNo" [13]=> string(10) "PolicyType" [14]=> string(10) "MultiState" [15]=> string(14) "LineOfBusiness" [16]=> string(13) "EffectiveDate" [17]=> string(24) "EndorsementEffectiveDate" [18]=> string(7) "EndDate" [19]=> string(7) "Premium" [20]=> string(13) "InsuredAmount" [21]=> string(9) "PolicyFee" [22]=> string(13) "InspectionFee" [23]=> string(6) "CatFee" [24]=> string(7) "SLTaxes" [25]=> string(17) "Fire Marshall Tax" [26]=> string(9) "Surcharge" [27]=> string(21) "Additional Assessment" [28]=> string(11) "StampingFee" [29]=> string(9) "InvoiceNo" [30]=> string(11) "InvoiceDate" [31]=> string(4) "AC1 " [32]=> string(8) "AC1 Date" [33]=> string(12) "AC1_Comments" [34]=> string(3) "AC2" [35]=> string(8) "AC2 Date" [36]=> string(12) "AC2_Comments" [37]=> string(3) "AC3" [38]=> string(8) "AC3 Date" [39]=> string(12) "AC3_Comments" [40]=> string(8) "Comments"
        }
    }
}

这是我运行 print_r 时得到的

打印_r

Array (
    [0] => Array (
        [0] => Array (
            [0] => ProcessorName
            [1] => BranchCode
            [2] => FileTaxID
            [3] => FileState
            [4] => FileLicense [5] => First [6] => Middle [7] => Company_Last [8] => InsuredName [9] => RiskLocation [10] => UnderwritingCo [11] => Home State [12] => PolicyNo [13] => PolicyType [14] => MultiState [15] => LineOfBusiness [16] => EffectiveDate [17] => EndorsementEffectiveDate [18] => EndDate [19] => Premium [20] => InsuredAmount [21] => PolicyFee [22] => InspectionFee [23] => CatFee [24] => SLTaxes [25] => Fire Marshall Tax [26] => Surcharge [27] => Additional Assessment [28] => StampingFee [29] => InvoiceNo [30] => InvoiceDate [31] => AC1 [32] => AC1 Date [33] => AC1_Comments [34] => AC2 [35] => AC2 Date [36] => AC2_Comments [37] => AC3 [38] => AC3 Date [39] => AC3_Comments [40] => Comments
        )
    )
)
4

2 回答 2

3

做一个var_dump($s)里面那个方法。您正在访问不存在的数组键。


编辑

鉴于您上面的转储,您应该使用:

$s[0][0][whatever]

反而。你有嵌套 3 层深的数组,但外两层是单元素数组,例如

$s = array(array(array("Processor Name", etc...)));
于 2012-07-24T14:39:18.887 回答
1

按照其他答案和评论的建议转储 var 以查看它实际具有哪些键,并为这些偏移量定义具有好名称的常量 - 它们是什么意思它们如何改变?这段代码对任何程序员(你在几天或几周内包括在内)都没有任何意义。

于 2012-07-24T14:43:38.640 回答