2013-02-20 2 views
-1

Я использовал небольшой скрипт для импорта файлов mt940 (файл транзакций голландских банков).получить значения из многомерного массива с объектами

Это массив, который я возвращаю, но мне нужно немного помочь получить правильные значения из массива.

Array (
    [0] => Statement_banking Object (
     [_bank:Statement_banking:private] => ING 
     [_account:Statement_banking:private] => 111111111 
     [_transactions:Statement_banking:private] => Array (
      [0] => Transaction_banking Object (
       [account:Transaction_banking:private] => 111111111 
       [accountName:Transaction_banking:private] => V. DE JONG KERKSTRAAT 1154 1234 BW 
       [price:Transaction_banking:private] => 0.56 
       [debitcredit:Transaction_banking:private] => C 
       [description:Transaction_banking:private] => 0111111111 V. DE JONG KERKSTRAAT 1154 1234 BW ENSCHEDE BET.KENM. 1004510036716378 3305330802 AFLOSSINGSTERMIJN 188616/1E TERMIJN 
       [valueTimestamp:Transaction_banking:private] => 1279749600 
       [entryTimestamp:Transaction_banking:private] => 1279749600 
       [transactionCode:Transaction_banking:private] => 078 
      ) 
      [1] => Transaction_banking Object (
       [account:Transaction_banking:private] => 111111111 
       [accountName:Transaction_banking:private] => CUSTOMER NL SPOEDBETALING 
       [price:Transaction_banking:private] => 10.45 
       [debitcredit:Transaction_banking:private] => C 
       [description:Transaction_banking:private] => 0111111111 CUSTOMER NL SPOEDBETALING GE2009120212345 RE091202­3737 /RFB/NL­FMI­021209 NL­FMI­021209 VOORSCHOT COMMISSIE 
       [valueTimestamp:Transaction_banking:private] => 1279749600 
       [entryTimestamp:Transaction_banking:private] => 1279749600 
       [transactionCode:Transaction_banking:private] => 077 
      ) 
      [2] => Transaction_banking Object (
       [account:Transaction_banking:private] => 
       [accountName:Transaction_banking:private] => 
       [price:Transaction_banking:private] => 10000.99 
       [debitcredit:Transaction_banking:private] => D 
       [description:Transaction_banking:private] => VERZAMELBETALING BATCH­ID:TOTAAL 198 POSTEN 
       [valueTimestamp:Transaction_banking:private] => 1279749600 
       [entryTimestamp:Transaction_banking:private] => 1279749600 
       [transactionCode:Transaction_banking:private] => 029)) 
       [_startPrice:Statement_banking:private] => 44 
       [_endPrice:Statement_banking:private] => 9945 
       [_timestamp:Statement_banking:private] => 1279749600 
       [_number:Statement_banking:private] => 100 
      ) 
     ) 

Этот ключ, например, дает мне имя и адрес:

[accountName:Transaction_banking:private] => V. DE JONG KERKSTRAAT 1154 1234 BW 

Этот ключ дает мне цену сделки:

[price:Transaction_banking:private] => 0.56 

Любые предложения?

+0

Это частные свойства классов 'Transaction_banking' и' Statement_banking'. Как выглядят классы? Вероятно, существует метод для извлечения данных. – MrCode

ответ

1

Обычно доступ будет адрес и сделка цены как:

foreach($yourArray[0]->_transactions as $transaction) { 
    $foo = $transaction->accountName; 
    $bar = $transaction->price; 
} 

Но в данном конкретном случае, некоторые из ваших полей являются частными, а это означает, что вы не можете получить доступ к их стоимости напрямую. Вы можете попробовать определение собственных Statement_banking и Transaction_banking классов и определить методы доступа для этих полей, такие как:

public class Statement_banking { 
    public function getTransactions() { 
     return $this->_transactions; 
    } 
} 

public class Transaction_banking { 
    public function getAccountName() { 
     return $this->accountName; 
    } 

    public function getPrice() { 
     return $this->price; 
    } 
} 

Тогда ваш код цикла становится следующим образом:

foreach($yourArray[0]->getTransactions() as $transaction) { 
    $foo = $transaction->getAccountName(); 
    $bar = $transaction->getPrice(); 
} 

Если вы хотите перебрать наружную массив, вы можете развернуть его до:

foreach($yourArray as $statement) { 
    foreach($statement->getTransactions() as $transaction) { 
     $foo = $transaction->getAccountName(); 
     $bar = $transaction->getPrice(); 
    } 
} 
+0

Thnx это сработало! –

1

Логически Вам нужно использовать вложенный Еогеасп или цикл, не уверен, о синтаксисе, но ниже PHP коды может помочь вам, а затем вы можете конвертировать в нужном языке

$outputArr = Is your array. 
    foreach ($outputArr as $firstchild){ 
    forach ($firstchild as $key => $secondchildvalue){ 
    // $key is basically your key value [price:Transaction_banking:private] 
    // $secondchildvalue is your info value 0.56 
    } 
    } 
+0

Это не сработает. Это частные свойства, 'цена: Transaction_banking: private' не является ключом. Все они являются частными, поэтому вы не можете напрямую обращаться к ним за пределами класса. – MrCode