2010-07-20 10 views
7
misma clave

tengo mis datos de la matriz como se muestra a continuación:matriz suma de valor basado en

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

Cómo sumar 'cantidad' basado en mismo nombre del banco.

Mis datos deben mostrado así:

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

Qué idioma ?? – colithium

+0

@Chandra, en lugar de poner ':: SOLVED ::' en el título de su pregunta, simplemente acepte la respuesta que le solucionó el problema (haga clic en el ícono 'V' al lado de esa respuesta). Gracias. –

+0

@Bart, gracias por mencionarle esto. Una nota: lo llamaría más una marca de verificación que una "V" :) –

Respuesta

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

Gracias Husni, código realmente genial, funciona. – Chandra

+0

Gracias @Husni, ¡WOW! ¡¡código!! – TomPHP

2

Ejemplo 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

Gracias, intentaré implementar tu script en PHP. – Chandra

+0

mi script está atascado ... todavía estoy intentando convertir tu C# en PHP. ¿alguna idea? Gracias. – Chandra

+0

No es necesario convertir la secuencia de comandos de Guffa. La respuesta de JGB146 es prácticamente la misma. – ozatomic

0
$a = arrayofindonesianbanks; 

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

ver foreach en php.

+0

Muchas gracias, estoy tratando de convertir el algoritmo GUFFA en PHP. pero todavía estoy atascado/confundido. – Chandra

+0

¡Resuelto! Gracias. – Chandra

+0

ok klick no tanda oknya ahahah. –

7

Por lo tanto, primero necesita $amountsArray para obtener los valores que enumeró, de alguna manera. Entonces:

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

Después de esto, $bankTotals es una matriz indexada en el nombre del banco, con el valor de la cantidad total para el banco. Puedes usar esta matriz como mejor te parezca desde aquí.

Una cosa que podría ser útil es otro bucle foreach imprimirlo todo lo alto:

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

Gracias JGB146 He estado escribiendo durante casi 3 días sin ningún resultado ... ¡Resuelto ahora! – Chandra

+0

Esta es la solución más simple. Así es como lo hago. – PHPGuru

1

yo preferiría añadir

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