2010-07-20 9 views
7

Mam danych tablicowych, jak pokazano poniżej:Array suma wartości opiera się na tym samym klawiszu

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) 
) 

Jak podsumować „kwoty” w oparciu o ten sam "nazwa banku.

Kim dane powinny przedstawiono w następujący sposób:

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

jakim języku ?? – colithium

+0

@ Chris, zamiast umieszczać ':: SOLVED ::' w tytule pytania, po prostu zaakceptuj odpowiedź, która rozwiązała problem (kliknij ikonę "V" obok tej odpowiedzi). Dzięki. –

+0

@Bart, dziękuję za wzmiankę o tym dla niego. Jedna uwaga: nazwałbym to bardziej znakiem kontrolnym niż "V" :) –

Odpowiedz

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

Dziękuję Husni, świetny kod, działa. – Chandra

+0

Dziękuję @Husni, WOW !! kod!! – TomPHP

2

Przykład 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

Dzięki, spróbuję wprowadzić twój skrypt do PHP. – Chandra

+0

Mój skrypt utknął ... nadal próbuję przekonwertować twoje C# do PHP. dowolny pomysł? Dzięki. – Chandra

+0

Nie ma potrzeby konwertowania skryptu Guffa. Odpowiedź JGB146 jest praktycznie taka sama. – ozatomic

0
$a = arrayofindonesianbanks; 

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

patrz foreach php.

+0

Wielkie dzięki, staram się przekonwertować algorytm GUFFA na PHP. ale nadal utknąłem/zdezorientowany. – Chandra

+0

Rozwiązany! Dzięki. – Chandra

+0

ok klick nie tanda oknya ahahah. –

7

Najpierw trzeba $amountsArray, aby jakoś przypisać wartości wymienione na liście. Następnie:

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

Po tym, $bankTotals jest tablica indeksowana na nazwę banku, o wartości całkowitej kwoty dla banku. Możesz użyć tej tablicy, jak widzisz, z tego miejsca.

Jedną rzeczą, która może być przydatna jest kolejnym foreach pętla wydrukować to wszystko:

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

Dziękuję JGB146 Skryptowałem przez prawie 3 dni bez żadnego wyniku ... Rozwiązany już teraz! – Chandra

+0

Ten jest najprostszym rozwiązaniem. Tak to robię. – PHPGuru

1

wolałbym dodać

$bankTotals = array(); 
foreach($amountsArray as $amount) 
{ 
if(isset($bankTotals[$amount['name']])) 
    $bankTotals[$amount['name']] += $amount['amount']; 
else 
    $bankTotals[$amount['name']] = $amount['amount']; 
} 
Powiązane problemy