[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: собрать правильный массив из данных
Por$h
Храню данные в 2-х таблицах.
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));
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.