2015-05-06 6 views
1

Это массив выборки из загрузки 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, я получаю следующее ошибка,

Примечание: Undefined индекс: Номер счета

Это мой код:

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]; 
    } 
} 

Я действительно застрял в этой небольшой проблеме. Пожалуйста, помогите мне решить это как можно скорее.

Заранее спасибо.

+0

Где находится ключ $? – eagle12

+0

private $ _csvColumnAccountNumber = 'Номер учетной записи'; –

+1

У вас есть одномерный ассоциативный массив в $ csvData выше. foreach - это не то, что вы хотите. – Devon

ответ

0

$ csvData - одномерный ассоциативный массив. Если вы запустите foreach ($csvData as $csvRow)$ csvRow будет каждое значение ('1011001562781010', '07/08/2014 'и т. Д.), Которое не то, что вы хотите, учитывая, что вы пытаетесь получить доступ к ключу, который не будет быть доступным.

Итак, первая проблема - вам не нужен foreach. $csvData[' Account Number'] - это то, что вам нужно.

Это приводит нас к второй проблеме. У вас есть пробел в вашем ключе. Вы должны запустить trim() о данных при создании $ csvData, чтобы избавиться от пробелов. В противном случае, вы можете сделать array_walk и дифферент данных с анонимной функцией:

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

Выше довольно сложным пример для начинающих. Это делает каждый элемент в $ csvData и выполняет функцию обратного вызова (функции). Эта функция отключит текущий ключ и определит новый отрегулированный ключ. Вы должны использовать use (&$csvData), чтобы предоставить ссылку на $ csvData в области функций.

+0

Сделано! ** array_walk ** сделал волшебство, спасибо чувак. –

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) - это разные ключи. Вы должны использовать точные имена для доступа к элементам массива. Я советую вам выполнить процедуру refactor заполнения $csvData со значениями и использовать функцию trim для ключей.