PHP цикл через переменную с данными из sqldb - PullRequest
0 голосов
/ 20 июня 2019

Я создаю таблицу сравнения html общих кредитов и дебетов за каждый месяц за последний год. Я получаю данные из таблицы базы данных sql и использую приведенный ниже код для разделения данных за каждый месяц.

Используя приведенный ниже код, я могу получить данные и отобразить их на своей html-странице. Но я должен написать отдельный подобный код для каждого месяца. Это только примерная таблица, у меня есть несколько похожих кодов для разных категорий кредитов, дебетов. поэтому каждый раз мне приходится дублировать его, как $credit0,$credit1....$credit11

Я новичок в php, и вот как я пришел с моим ограниченным знанием. Есть ли способ лучше, чем писать несколько похожих кодов для каждого месяца?

<?php

//setting initial variable values are 0

$credit0 =$credit1 =$credit2 = 0;
$debit0  =$debit1  =$debit2 = 0;

//Getting 12 months details in Y-M format and assigning to different variable
$month0 = date("Y-M");
$month1 = date("Y-M", strtotime("-1 months"));
$month2 = date("Y-M", strtotime("-2 months"));
$month3 = date("Y-M", strtotime("-3 months"));
$month4 = date("Y-M", strtotime("-4 months"));
$month5 = date("Y-M", strtotime("-5 months"));
$month6 = date("Y-M", strtotime("-6 months"));
$month7 = date("Y-M", strtotime("-7 months"));
$month8 = date("Y-M", strtotime("-8 months"));
$month9 = date("Y-M", strtotime("-9 months"));
$month10 = date("Y-M", strtotime("-10 months"));
$month11 = date("Y-M", strtotime("-11 months"));

//Get the date details from sqldb and assgning to variable in Y-M format

$month_check= date('Y-M', strtotime($data['date'])); 

//each loop with the data from sqldb
foreach ($datas as $data){

    if ($month_check == $month0)  {

        if ($data['entry_type'] ==  'Credit') { $credit0 =  $credit0 + $data['amount']; }
        if ($data['entry_type'] ==  'Debit' ) { $debit0  =  $debit0  + $data['amount']; }   

    }

    if ($month_check == $month1)  {

        if ($data['entry_type'] ==  'Credit') { $credit1 =  $credit1 + $data['amount']; }
        if ($data['entry_type'] ==  'Debit' ) { $debit1  =  $debit1  + $data['amount']; }   

    }

    if ($month_check == $month2)  {

        if ($data['entry_type'] ==  'Credit') { $credit2 =  $credit2 + $data['amount']; }
        if ($data['entry_type'] ==  'Debit' ) { $debit2  =  $debit2  + $data['amount']; }   

    }
    .
    .
    .
    .
    .
    same format upto $month11
}

echo '<table"> 
        <thead>
            <tr>
               <th>Month</th>
               <th>Total Credit</th>
               <th>Total Debit</th>
            </tr> 
        </thead>
        <tbody>
            <tr>
                <td>'.$month0.'</td>
                <td>'.$credit0.'</td>
                <td>'.$debit0.'</td>
            </tr>
            <tr>
                <td>'.$month1.'</td>
                <td>'.$credit1.'</td>
                <td>'.$debit1.'</td>
            </tr>
            <tr>
                <td>'.$month2.'</td>
                <td>'.$credit2.'</td>
                <td>'.$debit2.'</td>
            </tr>
            .
            .
            .
            .
            upto $month11

        </tbody>

</table>';

//I have multiple similar tables for different categories

?>

UPDATE: Используя цикл, я попробовал метод ниже, но он не работает должным образом

<?php

$credit0 =$credit1 =$credit2 = 0;
$debit0  =$debit1  =$debit2 = 0;

$month0 = date("Y-M");
$month1 = date("Y-M", strtotime("-1 months"));
$month2 = date("Y-M", strtotime("-2 months"));
$month3 = date("Y-M", strtotime("-3 months"));
$month4 = date("Y-M", strtotime("-4 months"));
$month5 = date("Y-M", strtotime("-5 months"));
$month6 = date("Y-M", strtotime("-6 months"));
$month7 = date("Y-M", strtotime("-7 months"));
$month8 = date("Y-M", strtotime("-8 months"));
$month9 = date("Y-M", strtotime("-9 months"));
$month10 = date("Y-M", strtotime("-10 months"));
$month11 = date("Y-M", strtotime("-11 months"));

$months = array($month0,$month1,$month2,$month3,$month4,$month5,$month6,$month7,$month8,$month9,$month10,$month11);
$nums = array(0,1,2,3,4,5,6,7,8,9,10,11);

foreach  (array_combine($months, $nums) as $month => $num) {

$month_check= date('Y-M', strtotime($data['date'])); 

foreach ($datas as $data){

    if ($month_check == $month)  {

        if ($data['entry_type'] ==  'Credit') { $credit.$num =  $credit.$num + $data['amount']; }
        if ($data['entry_type'] ==  'Debit' ) { $debit.$num  =  $debit.$num  + $data['amount']; }   

    }

}

echo '<table"> 
        <thead>
            <tr>
               <th>Month</th>
               <th>Total Credit</th>
               <th>Total Debit</th>
            </tr> 
        </thead>
        <tbody>
            <tr>
                <td>'.$month.$num.'</td>
                <td>'.$credit.$num.'</td>
                <td>'.$debit.$num.'</td>
            </tr>
        </tbody>

</table>';

}


?>

1 Ответ

0 голосов
/ 20 июня 2019

Ну, во-первых, это:

$month0 = date("Y-M");
$month1 = date("Y-M", strtotime("-1 months"));
$month2 = date("Y-M", strtotime("-2 months"));
$month3 = date("Y-M", strtotime("-3 months"));
$month4 = date("Y-M", strtotime("-4 months"));
$month5 = date("Y-M", strtotime("-5 months"));
$month6 = date("Y-M", strtotime("-6 months"));
$month7 = date("Y-M", strtotime("-7 months"));
$month8 = date("Y-M", strtotime("-8 months"));
$month9 = date("Y-M", strtotime("-9 months"));
$month10 = date("Y-M", strtotime("-10 months"));
$month11 = date("Y-M", strtotime("-11 months"));

$months = array($month0,$month1,$month2,$month3,$month4,$month5,$month6,$month7,$month8,$month9,$month10,$month11);
$nums = array(0,1,2,3,4,5,6,7,8,9,10,11);

Получается так:

$months = array();
$nums = array();

for($i=0; $i<12; $i++) {
     $month = date("Y-M", strtotime("-".$i." months"));
     array_push($months, $month);
     array_push($nums, $i);
}

И я не совсем понимаю, что именно вы пытаетесь сделать с остальным кодом:|

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...