Получить значения из многомерного массива с объектами
Я использовал небольшой скрипт для импорта файлов 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: 012345 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
Какие-либо предложения?
2 ответа
Обычно вы получаете доступ к адресу и цене транзакции как:
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();
}
}
Логически Вам необходимо использовать вложенный цикл foreach или for. Не уверен насчет синтаксиса, но ниже 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
}
}