2010-07-20 8 views
7

j'ai mes données de tableau comme indiqué ci-dessous:somme Tableau de valeur basée sur une même touche

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

Comment résumer « montant » sur la base même « nom de la banque ».

Mes données devraient montré comme ceci:

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

Quelle langue ?? – colithium

+0

@Chandra, au lieu de mettre ':: SOLVED ::' dans le titre de votre question, acceptez simplement la réponse qui a résolu le problème pour vous (cliquez sur l'icône 'V' à côté de cette réponse). Merci. –

+0

@Bart, merci de lui avoir mentionné cela. Une note: je l'appellerais plus d'un crochet que d'un "V" :) –

Répondre

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

Merci Husni, vraiment génial code, ça marche. – Chandra

+0

Merci @Husni, le WOW !! code!! – TomPHP

2

Exemple en 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

Merci, je vais essayer d'implémenter votre script dans PHP. – Chandra

+0

mon script bloqué ... j'essaie toujours de convertir votre C# en PHP. une idée? Merci. – Chandra

+0

Il n'y a pas besoin de convertir la réponse JGB146 du script de Guffa est pratiquement la même chose. – ozatomic

0
$a = arrayofindonesianbanks; 

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

voir foreach en php.

+0

Merci beaucoup, j'essaie de convertir l'algorithme GUFFA en PHP. mais je suis toujours coincé/confus. – Chandra

+0

Résolu! Merci. – Chandra

+0

ok klick dont tanda oknya ahahah. –

7

Donc, vous avez d'abord besoin de $amountsArray pour obtenir les valeurs que vous avez listées. Puis:

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

Après cela, $bankTotals est un tableau indexé sur le nom de la banque, avec la valeur du montant total de la banque. Vous pouvez utiliser ce tableau comme vous le souhaitez d'ici.

Une chose qui pourrait être utile est une autre boucle foreach pour imprimer tout sur:

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

Merci JGB146 J'ai été scripting pendant presque 3 jours sans aucun résultat ... Résolu maintenant! – Chandra

+0

Celui-ci est la solution la plus simple. C'est comme ça que je le fais. – PHPGuru

1

Je préfère ajouter

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