2010-03-26 5 views
4

J'ai un tableau qui ressemble à ceci:Accumulez 2D tableau par Index

Array 
(
    [0] => Array 
     (
      [amount] => 60.00 
      [store_id] => 1 
     ) 

    [1] => Array 
     (
      [amount] => 40.00 
      [store_id] => 1 
     ) 

    [2] => Array 
     (
      [amount] => 10.00 
      [store_id] => 2 
     ) 
) 

Quelle serait une bonne méthode pour réduire le tableau à un tableau similaire qui totalise le « montant » lié à un store_id.

Par exemple, je voudrais obtenir ceci:

Array 
(
    [0] => Array 
     (
      [amount] => 100.00 
      [store_id] => 1 
     ) 


    [2] => Array 
     (
      [amount] => 10.00 
      [store_id] => 2 
     ) 
) 

Répondre

2

Pour reproduire exactement ce que vous avez demandé:

<?php 

$stores = array(); 
$result = array(); 
foreach($rows as $i => $entry) { 
    if (false === ($j = array_search($entry['store'], $stores))) { 
    $stores[$i] = $entry['store']; 
    $result[$i] = $entry; 
    } 
    else { 
    $result[$j]['amount'] += $entry['amount']; 
    } 
} 
+3

+1 pour EXACTEMENT ce qu'il voulait. Je suis allé pour l'approche «utiliser une meilleure solution». – Tesserex

+0

merci beaucoup –

2

Pour des précisions sur la réponse de Thrawn, ce que vous voulez pour votre tableau à indexer par store_id. Qu'est-ce que vous voulez à la fin est:

array (
     [1] => 100.00 
     [2] => 10.00 
    ) 

Si vous ne pouvez pas construire que dès le début, mais vous êtes obligé de travailler avec cette structure de tableau original (appelons-le $stores), faites ceci:

$totals = array(); 
    foreach ($stores as $store) { 
     if (!array_key_exists($store['store_id'], $totals)) { 
      $totals[$store['store_id']] = $store['amount']; 
     } 
     else { 
      $totals[$store['store_id']] += $store['amount']; 
     } 
    } 

Il y a un tas de façons de le faire array_key_exists vérifier. empty et isset suffiraient tous les deux.

+0

merci pour votre entrée array_key_exists m'a causé quelques problèmes dans magento avant. –