loans и installments
пример:
loan_id = в обеих таблицах
amount и status в таблие loans
date, principal, interest в installments
мне надо вытащить все записи в вот такую структуру, т.е 1 или несколько записей из таблицы installments относятся к одной записи из таблицы loans.
Подскажите как , голова не варит совсем !?
Здесь 2 записи в таблице loan, и 3 записи в таблице instalments.
[
{
"loan_id": "foo",
"amount": 150,
"status": "issued",
"instalments": [{
"date": "2016-07-15",
"principal": 50.12,
"interest": 0.08
}, {
"date": "2016-07-16",
"principal": 30,
"interest": 0.08
}]
},
{
"loan_id": "bar",
"amount": 150,
"status": "issued",
"instalments": [{
"date": "2016-07-15",
"principal": 50.12,
"interest": 0.08
}]
}
]
запрос из бд у меня обычный inner join, что в итоге получаю:
$array = array (
array (
'loan_id' => 'foo',
'amount' => 120.00,
'status' => 'requested',
'principal' => 70.00,
'interest' => 0.80,
'date' => '2016-07-15'
),
array (
'loan_id' => 'bar',
'amount' => 150.00,
'status' => 'requested',
'principal' => 30.00,
'interest' => 0.80,
'date' => '2016-07-16'
),
array (
'loan_id' => 'foo',
'amount' => 150.00,
'status' => 'requested',
'principal' => 60.00,
'interest' => 0.80,
'date' => '2016-07-17'
),
array (
'loan_id' => 'baz',
'amount' => 150.00,
'status' => 'requested',
'principal' => 25.00,
'interest' => 0.80,
'date' => '2016-07-18'
),
array (
'loan_id' => 'bar',
'amount' => 150.00,
'status' => 'requested',
'principal' => 20.00,
'interest' => 0.80,
'date' => '2016-07-19'
),
array (
'loan_id' => 'hez',
'amount' => 135.00,
'status' => 'requested',
'principal' => 20.00,
'interest' => 0.80,
'date' => '2016-07-20'
),
array (
'loan_id' => 'bar',
'amount' => 150.00,
'status' => 'requested',
'principal' => 30.00,
'interest' => 0.80,
'date' => '2016-07-17'
),
);
function getLoans($dataArray) {
$allLoans = [];
foreach ($dataArray as $key => $val) {
$currentLoan = [];
$currentLoan['amount'] = $val['amount'];
$currentLoan['status'] = $val['status'];
$currentLoan['loan_id'] = $val['loan_id'];
// find keys for this loan_id
$thisLoanKeys = getLoanKeys($dataArray, $val['loan_id']);
// dostat date,principal,interest u vsex massivov po zadannqm klju4am
$thisLoanInstalments = getThisLoanInstalments($dataArray, $thisLoanKeys);
$currentLoan['instalments'] = $thisLoanInstalments;
// sohranaem etot loan v $allLoans
$allLoans[] = $currentLoan;
// udalit massivq po etim klju4am
// pereindeksirovat
// vqzvat etu ze funkciju libo proverjat loan_id est li on uze v massive $allLoans
}
return $allLoans;
}
function getLoanKeys($array, $loanId){
$keys = [];
for($i=0; $i< count($array); $i++) {
if(array_keys($array[$i], $loanId)) {
$keys[] = $i;
}
}
return [$loanId => $keys];
}
$allLoanIds = getLoanKeys($array, 'foo');
function getThisLoanInstalments($array, $allLoanIds) {
foreach($allLoanIds as $k => $v)
{
$thisInstalment = [];
foreach($v as $kkv){
$loanInstalments['principal'] = $array[$kkv]['principal'];
$loanInstalments['interest'] = $array[$kkv]['interest'];
$loanInstalments['date'] = $array[$kkv]['date'];
$thisInstalment[] = $loanInstalments;
}
}
return $thisInstalment;
}
print_r(getLoans($array));