2016-11-27 6 views
0

Wie kann ich die gesamte Einzahlung und die gesamte Einzahlung für jeden Monat zusammen bekommen? (z. B. die gesamte Einzahlung und Gesamtrücknahme im Januar) von einem Array.Wie bekomme ich die Summe der Werte einiger Arrays innerhalb eines Arrays?

Eigentlich habe ich einige Tabelle (100+). Jede Tabelle enthält so viele Datensätze mit Spaltenfeldern für Einzahlung, Auszahlung und Datum. Ich muss den Einzahlungsbetrag addieren und den Wert nach Datum gruppieren.

In der Tat, ich habe die monatliche Gesamteinzahlung und Gesamtrücknahme für jeden Tisch. Jetzt muss ich jeden Monat aus allen Tabellen zusammenrechnen. z. B. Total Einzahlung und Abzug von Jaunuary aller Tische.

In meinem CI Controller:

$all_table_id = $this->admin_model->get_all_id(); 

foreach ($all_table_id as $table_id) 
{ 
    // $table_id['accountNo'] is generated table name 
    // e.g baby_ld_account_45456 ,baby_ld_account_12345 

    $tableName = "baby_ld_account_" . $table_id['accountNo']; 

    $single_table_monthly_data = $this->admin_model->get_monthly_data_each_table($tableName); 

    // print_r($single_table_monthly_data); 

    $all_table_monthly_data[] = $single_table_monthly_data; 

    print_r($monthly_data); 
} 

In meinem CI Modell:

public function get_monthly_data_each_table($tableName) { 
    $sql = "SELECT DATE_FORMAT(`entryDate`,'%M') as Month, 
        SUM(`deposit`) AS `Deposit`, 
        SUM(`withDraw`) AS `Withdraw` 
      FROM $tableName 
      WHERE YEAR(`entryDate`) = YEAR(CURDATE()) 
      GROUP BY DATE_FORMAT(`entryDate`,'%M')"; 

    $query = $this->db->query($sql); 
    $result = $query->result_array($query); 

    return $result; 
} 

Array Ergebnis:

Array (
    [0] => Array ( 
     [0] => Array ([Month] => January [Deposit] => 4000 [Withdraw] => 8000) 
     [1] => Array ([Month] => February [Deposit] => 200 [Withdraw] => 5000) 
    ) 

    [1] => Array (
     [0] => Array ([Month] => January [Deposit] => 1000 [Withdraw] => 1000) 
     [1] => Array ([Month] => February [Deposit] => 3000 [Withdraw] => 6000) 
    ) 
    [2] => Array (
     [0] => Array ([Month] => January [Deposit] => 6000 [Withdraw] => 2000) 
     [1] => Array ([Month] => February [Deposit] => 4000 [Withdraw] => 8000) 
    ) 

    [3] => Array (
     [0] => Array ([Month] => January [Deposit] => 3500 [Withdraw] => 2000) 
     [1] => Array ([Month] => February [Deposit] => 1200 [Withdraw] => 5000) 
    ) 
) 

Kann mir jemand eine Lösung geben?

+0

Bitte fügen Sie Code/Array und erwartetes Ergebnis ein –

+0

Sie haben mit MySQL getaggt und das erste, was Ihnen in den Sinn kommt, ist, dass Sie dies in der Datenbank versuchen sollten, bevor Sie das verschachtelte Array in PHP bringen. –

+0

Tim könnte einen Punkt haben, aber eigentlich sollten Sie in der Lage sein, dies genauso effektiv in PHP oder JavaScript zu tun. – Strawberry

Antwort

1

Da dies in Kommentaren angegeben wurde, sollte dies besser mit SQL-Abfrage erledigt werden.

Aber Sie sicher, kann es mit PHP tun:

$result = array_reduce(
    array_reduce($array, 'array_merge', []), // Flattern array. 
    function ($result, $item) { 
     // Extract array elements to variables, for the sake of easier use. 
     extract($item); 

     // If there's no entry for current month - create emtpy entry. 
     if (!isset($result[$Month])) { 
      $result[$Month] = [ 
       'Deposit' => 0, 
       'Withdraw' => 0 
      ]; 
     } 

     // Add current amounts. 
     $result[$Month]['Deposit'] += $Deposit; 
     $result[$Month]['Withdraw'] += $Withdraw; 

     return $result; 
    }, 
    [] 
); 

ist hier working demo.

+0

@ sevavietl.Wie kann ich das Array mit Monatsnamen auch bekommen? Zum Beispiel (Array ([0] => Array [[Monat] => 'Januar' [Einzahlung] => 14500 [Auszahlung] => 13000))) aus Ihrer gegebenen Demo. –

+1

@RiyadhAhmed, können Sie ''Monat' => $ Monat,' zu '$ Ergebnis [$ Monat] = [ 'Einzahlung' => 0, 'Auszahlung' => 0 ];' – sevavietl

+0

Es funktioniert gut .Vielen Dank. –

Verwandte Themen