7
votes

Données de groupe de groupe sur une colonne et la somme des données d'une autre colonne

J'ai mes données matricielles comme indiqué ci-dessous:

array (
  'Bank BRI' => 34534534,
  'Bank BCA' => 1435773657,
  'Bank CIMB Niaga' => 1338303418,
  'Bank BNI' => 124124,
  'Bank Mandiri' => 0,
  'Bank Permata' => 352352353,
)


0 commentaires

6 Réponses :


2
votes

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


3 commentaires

Merci, je vais essayer de mettre en œuvre votre script en PHP.


Mon script collé ... J'essaie toujours de convertir votre C # en PHP. une idée? Merci.


Il n'est pas nécessaire de convertir la réponse JGB146 de Guffa's Script est pratiquement la même.



-1
votes
$a = arrayofindonesianbanks;

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

1 commentaires

Merci beaucoup, j'essaie de convertir Guffa Algorithm en PHP. Mais je suis toujours coincé / confus.



9
votes

Donc, tout d'abord, vous avez besoin $ quantitéparray code> pour avoir attribué les valeurs que vous avez répertoriées, d'une manière ou d'une autre. Ensuite:

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


2 commentaires

Merci JGB146 Je suis script depuis près de 3 jours sans aucun résultat ... Résolu maintenant!


@Jeffrey Blake, que si nous avons deux clés pour fusionner. Disons que le nom de la banque et l'adresse bancaire ne résumeront que le montant que si seuls le même nom et le même nom ... ont effectivement ces problèmes en ce moment ... s'il vous plaît aider



6
votes
<?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 commentaires

3
votes

Je préférerais ajouter

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


0 commentaires

0
votes

@ La boucle de Shubham est une technique parfaitement adéquate.

Vous voudrez peut-être utiliser array_reduce () code> si vous voulez: p>

  • Évitez de générer une variable globale-scopée ou li>
  • veulent travailler avec une valeur retournée ou li>
  • préfère généralement un style fonctionnel li> ul>

    L'opérateur coalescent NULL empêche de générer des avertissements / erreurs d'ajouter aux éléments non encore déclarés dans le tableau de résultat p>

    code: ( Demo ) p> xxx pré>

    sortie: p>

    array (
      'Bank BRI' => 34534534,
      'Bank BCA' => 1435773657,
      'Bank CIMB Niaga' => 1338303418,
      'Bank BNI' => 124124,
      'Bank Mandiri' => 0,
      'Bank Permata' => 352352353,
    )
    


0 commentaires