【问题标题】:PHP str_getcsv getting Undefined offsetPHP str_getcsv 获取未定义的偏移量
【发布时间】:2017-11-07 14:51:51
【问题描述】:

在使用 str_getcsv 读取 CSV 文件并为其分配键时,我很难摆脱这个未定义的偏移量通知。

我已经尝试过issetarray_key_exists,这在其他线程中已经提到过。 isset 确实解决了未定义的索引通知,但我无法删除未定义的偏移通知:

$file = file("lookup.csv",FILE_SKIP_EMPTY_LINES);
$csv = array_map("str_getcsv",$file, array_fill(0, count($file), ';'));
$keys = array_shift($csv);
    foreach ($csv as $i=>$row) {
        $csv[$i] = array_combine($keys, $row);  
    }
$numberOfRows = count($csv);
$numberOfColumns = count(current($csv));
    for ( $i = 0; $i <= $numberOfRows; $i ++ ) {  // first loop to run thru to find correct sku template name in csv file
      if ( $csv[$i]['sku'] === $sku ) { // if sku matches  // Getting Undefined offset on this line
        for ( $j = 0; $j <= $numberOfColumns; $j++) {  // second loop to create variables from header line
            ${$keys[$j]} = isset($csv[$i][$keys[$j]]) ? $csv[$i][$keys[$j]] : ''; //  // Getting 2 Undefined offset notices on this line
            }
        }
    }

有问题的 CSV 文件确实有一些空白单元格。那些空白单元格将被保留(我对此无能为力)。

请谁能指出我正确的方向?非常感谢任何帮助,谢谢!

【问题讨论】:

  • 试试这个 $file = file('lookup.csv', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

标签: php arrays csv fgetcsv


【解决方案1】:

尝试删除数组中的最后一个元素,它有时是一个空项,因为由于实际最后一行末尾的换行符而拾取了文件中的额外行。

$csv = array_map("str_getcsv",$file, array_fill(0, count($file), ';'));
array_pop($csv);

【讨论】:

  • 感谢您的回复 - 不幸的是它没有任何区别,未定义的偏移量仍然存在。我还手动从 csv 文件中删除了最后一个空行,看看它是否改变了任何东西,但它没有。
【解决方案2】:

好吧,其实我自己也弄明白了。

解决方案是添加 isset - 以防万一它对其他人有帮助,这是我的解决方案:

    for ( $i = 0; $i <= $numberOfRows; $i ++ ) {

    $csv[$i]['sku'] = isset($csv[$i]['sku']) ? $csv[$i]['sku'] : ''; // <-- isset added

      if ( $csv[$i]['sku'] === $sku ) {

        for ( $j = 0; $j <= $numberOfColumns; $j++) {

                $keys[$j] = isset($keys[$j]) ? $keys[$j] : ''; // <-- isset added

                $csv[$i][$keys[$j]] = isset($csv[$i][$keys[$j]]) ? $csv[$i][$keys[$j]] : '';

                ${$keys[$j]} = $csv[$i][$keys[$j]];
            }
        }
    }

【讨论】:

    猜你喜欢
    • 2013-09-17
    • 2014-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-23
    相关资源
    最近更新 更多