2010-07-20 8 views
7

ich meine Array-Daten haben, wie unten dargestellt:Array Wertsumme basierend auf demselben Schlüssel

Array ( 
    [0] => Array ([name] => Bank BRI [amount] => 0) 
    [1] => Array ([name] => Bank BRI [amount] => 0) 
    [2] => Array ([name] => Bank BCA [amount] => 1412341234) 
    [3] => Array ([name] => Bank CIMB Niaga [amount] => 532532552) 
    [4] => Array ([name] => Bank BRI [amount] => 34534534) 
    [5] => Array ([name] => Bank CIMB Niaga [amount] => 453425243) 
    [6] => Array ([name] => Bank BRI [amount] => 0) 
    [7] => Array ([name] => Bank BNI [amount] => 124124) 
    [8] => Array ([name] => Bank CIMB Niaga [amount] => 352345623) 
    [9] => Array ([name] => Bank BCA [amount] => 23432423) 
    [10] => Array ([name] => Bank Mandiri [amount] => 0) 
    [11] => Array ([name] => Bank BCA [amount] => 0) 
    [12] => Array ([name] => Bank BCA [amount] => 0) 
    [13] => Array ([name] => Bank Permata [amount] => 352352353) 
) 

Wie ‚Menge‘ basiert zusammenzufassen auf demselben ‚Bankname‘.

Meine Daten sollen wie folgt dargestellt:

Bank BRI........... with '*total amount*' 
Bank BCA........... with '*total amount*' 
Bank CIMB NIAGA.... with '*total amount*' 
Bank BNI........... with '*total amount*' 
Bank Mandiri....... with '*total amount*' 
Bank Permata....... with '*total amount*' 
+0

Welche Sprache ?? – colithium

+0

@Chandra, anstatt ':: SOLVED ::' in den Titel Ihrer Frage zu setzen, akzeptieren Sie einfach die Antwort, die das Problem für Sie gelöst hat (klicken Sie auf das 'V'-ähnliche Symbol neben dieser Antwort). Vielen Dank. –

+0

@Bart, danke, dass du ihm das gesagt hast. Eine Anmerkung: Ich würde es eher ein Häkchen als ein "V" nennen :) –

Antwort

5
<?php 

// array of bank structure 
$banks = array(); 
$banks[] = array('name'=>'Bank BRI','amount'=>rand()); 
$banks[] = array('name'=>'Bank BRI','amount'=>rand()); 
$banks[] = array('name'=>'Bank BCA','amount'=>rand()); 
$banks[] = array('name'=>'Bank CIMB','amount'=>rand()); 
$banks[] = array('name'=>'Bank BRI','amount'=>rand()); 
$banks[] = array('name'=>'Bank CIMB','amount'=>rand()); 
$banks[] = array('name'=>'Bank BRI','amount'=>rand()); 
$banks[] = array('name'=>'Bank BNI','amount'=>rand()); 
$banks[] = array('name'=>'Bank CIMB','amount'=>rand()); 
$banks[] = array('name'=>'Bank BCA','amount'=>rand()); 
$banks[] = array('name'=>'Bank Mandiri','amount'=>rand()); 
$banks[] = array('name'=>'Bank BCA','amount'=>rand()); 
$banks[] = array('name'=>'Bank BCA','amount'=>rand()); 
$banks[] = array('name'=>'Bank Permata','amount'=>rand()); 

// begin the iteration for grouping bank name and calculate the amount 
$amount = array(); 
foreach($banks as $bank) { 
    $index = bank_exists($bank['name'], $amount); 
    if ($index < 0) { 
     $amount[] = $bank; 
    } 
    else { 
     $amount[$index]['amount'] += $bank['amount']; 
    } 
} 
print_r($amount); //display 

// for search if a bank has been added into $amount, returns the key (index) 
function bank_exists($bankname, $array) { 
    $result = -1; 
    for($i=0; $i<sizeof($array); $i++) { 
     if ($array[$i]['name'] == $bankname) { 
      $result = $i; 
      break; 
     } 
    } 
    return $result; 
} 
+0

Danke Husni, wirklich toller Code, es klappt. – Chandra

+0

Danke @Husni, der WOW !! Code!! – TomPHP

2

Beispiel in C#:

Dictionary<string,object>[] items = { 
    new Dictionary<string, object> {{ "name", "Bank BRI"}, {"amount", 0 }}, 
    new Dictionary<string, object> {{ "name", "Bank BRI"}, {"amount", 0 }}, 
    new Dictionary<string, object> {{ "name", "Bank BCA"}, {"amount", 1412341234 }}, 
    new Dictionary<string, object> {{ "name", "Bank CIMB Niaga"}, {"amount", 532532552 }} 
}; 

var amounts = new Dictionary<string, int>(); 

foreach (var item in items) { 
    string bank = (string)item["name"]; 
    int amount = (int)item["amount"]; 
    if (amounts.ContainsKey(bank)) { 
    amounts[bank] += amount; 
    } else { 
    amounts.Add(bank, amount); 
    } 
} 

foreach (var amount in amounts) { 
    Console.WriteLine("{0}: {1}", amount.Key, amount.Value); 
} 
+0

Danke, ich werde versuchen, dein Skript in PHP zu implementieren. – Chandra

+0

mein Skript fest ... ich versuche immer noch, Ihre C# in PHP zu konvertieren. irgendeine Idee? Vielen Dank. – Chandra

+0

Es ist nicht notwendig, Guffas Skript zu konvertieren JGB146 Antwort ist praktisch gleich. – ozatomic

0
$a = arrayofindonesianbanks; 

foreach ($a as $anarrays) { 
     echo "$anarrays[name]." ".$anarrays[amount]"; 
    } 
} 

foreach in PHP zu sehen.

+0

Vielen Dank, ich versuche, GUFFA-Algorithmus in PHP zu konvertieren. aber ich stecke immer noch fest/verwirrt. – Chandra

+0

Gelöst! Vielen Dank. – Chandra

+0

ok klick nicht tanda oknya ahahah. –

7

Also, zuerst müssen Sie $amountsArray, um die Werte, die Sie aufgelistet, irgendwie zugewiesen bekommen. Dann gilt:

$bankTotals = array(); 
foreach($amountsArray as $amount) 
{ 
    $bankTotals[$amount['name']] += $amount['amount']; 
} 

Danach wird $bankTotals ist ein Array auf Namen der Bank indiziert, wobei der Wert der Gesamtmenge für die Bank. Sie können dieses Array verwenden, wie Sie von hier sehen.

Eine Sache, die nützlich sein könnte, ist eine andere foreach Schleife sie alle aus drucken:

foreach($bankTotals as $name => $amount) 
{ 
    echo $name.".....".$amount."\n"; 
} 
+0

Danke JGB146 Ich habe für fast 3 Tage ohne Ergebnis geschrieben ... Gelöst jetzt! – Chandra

+0

Dies ist die einfachste Lösung. So mache ich es. – PHPGuru

1

Ich würde lieber hinzufügen

$bankTotals = array(); 
foreach($amountsArray as $amount) 
{ 
if(isset($bankTotals[$amount['name']])) 
    $bankTotals[$amount['name']] += $amount['amount']; 
else 
    $bankTotals[$amount['name']] = $amount['amount']; 
} 
Verwandte Themen