无法从数组中获取值

时间:2015-05-06 15:35:07

标签: php csv multidimensional-array zend-framework2 fgetcsv

这是csv文件上传的示例数组,我正在处理

$csvData = array(7) { 
               [" Account Number"]=> string(32) " 1011001562781010" 
               [" Posting Date"]=> string(10) "07/08/2014" 
               [" Value Date"]=> string(10) "07/08/2014"
               [" Description"]=> string(46) "Cash Withdrawal by Cheque173320--TT1421957901"
               [" Debit Amount"]=> string(7) "2000.00"  
               [" Credit Amount"]=> string(0) "" 
               ["Running Balance"]=> string(9) "388392.62" 
            }    

尝试使用 $ csvData 获取值时,出现以下错误,

  

注意:未定义的索引:帐号

这是我的代码:

foreach ($csvData as $csvRow) {
    $csvData[$key] =$csvRow[$this->_csvColumnAccountNumber];
    if (strtolower($csvRow[$this->_csvColumnAccountNumber]) === $csv_ied_account_number) {
        $CsvValues[$key] = $csvRow[$this->_csvColumnCreditAmount];
        $CsvValues[$key] = $csvRow[$this->_csvColumnDebitAmount];
    }
}

我真的被困在这个小问题上。 请尽快帮我解决这个问题。

提前致谢。

2 个答案:

答案 0 :(得分:0)

如果你的数据真的像这样:

array(7) { [" Account Number"]=> string(32) " 1011001562781010" 
[" Posting Date"]=> string(10) "07/08/2014" 
....
[" Credit Amount"]=> string(0) "" 
["Running Balance"]=> string(9) "388392.62" }   

然后尝试阅读密钥"Account Number" 绝对将失败。因为密钥"Account Number"" Account Number"A之前有一个空格)是不同的密钥。您应该使用完全键名来访问数组元素。我建议您重构使用值填充$csvData的过程,并使用trim函数作为键。

答案 1 :(得分:0)

$ csvData 是一个单维关联数组。如果您运行foreach ($csvData as $csvRow) $ csvRow 将成为每个值(' 1011001562781010',' 07/08 / 2014',依此类推)这不是你想要的,考虑到你正试图访问那些无法获得的密钥。

所以第一个问题是你不需要 foreach $csvData[' Account Number']就是你追求的目标。

这给我们带来了第二个问题。您的密钥中有空格。在创建 $ csvData 时,您应该对数据运行 trim() 以消除空白。否则,您可以执行 array_walk 并使用匿名函数修剪数据:

array_walk($csvData, function($value, $key) use (&$csvData) {
  unset($csvData[$key]);
  $csvData[trim($key)] = $value;
});

以上是初学者非常复杂的例子。这样做是通过 $ csvData 中的每个元素来运行并运行提供的回调(函数)。此功能将取消设置当前键并定义新的修剪键。您必须使用use (&$csvData)在函数范围内提供对 $ csvData 的引用。