2010-10-29 22 views
0

J'ai un tableau comme suit. Je commande ce tableau par la valeur de la clé "attaque". Tout est ok jusque là, mais je veux obtenir par exemple seulement 9 de ce total des valeurs d'attaque sont résumées: Je veux résumer 3 de key1 (3 * 45), 4 de key3 (4 * 35) et 2 de key2 (2 * 25) sont automatiquement additionnés. Je serais grandement apprécié si quelqu'un m'aide.Comment obtenir la somme de la valeur basée sur la même clé jusqu'à un certain point dans un tableau?

Voici le tableau:

$data = array(
'1' => array('id' => '1', 'attack' => '45', 'defence' => '15', 'total' => '3'), 
'2' => array('id' => '2', 'attack' => '25', 'defence' => '15', 'total' => '6'), 
'3' => array('id' => '3', 'attack' => '35', 'defence' => '15', 'total' => '4'), 
'4' => array('id' => '4', 'attack' => '20', 'defence' => '10', 'total' => '4') 

);

Répondre

0

Voici mon exemple d'implémentation:

$data = array(
'1' => array('id' => '1', 'attack' => '45', 'defence' => '15', 'total' => '3'), 
'2' => array('id' => '2', 'attack' => '25', 'defence' => '15', 'total' => '6'), 
'3' => array('id' => '3', 'attack' => '35', 'defence' => '15', 'total' => '4'), 
'4' => array('id' => '4', 'attack' => '20', 'defence' => '10', 'total' => '4') 
); 

usort($data, 'sort_by_attack'); 

$attacks_amount = 9; 
$sum = 0; 

$row = current($data); 

while ($attacks_amount > 0) { 
     $attacks_amount -= $row['total']; 
     $take = $row['total']; 

     if ($attacks_amount < 0) { 
       $take += $attacks_amount; 
     } 

     $sum += $take * $row['attack']; 

     $row = next($data); 
     if (!$row) break; 
} 

var_dump($sum); 

function sort_by_attack($a, $b) 
{ 
     return $a['attack'] > $b['attack'] ? -1 : 1; 
} 
+0

Merci pour votre réponse, il est vraiment utile, mais j'ai oublié de dire que la limite sera le montant total qui est dans le tableau, pas le montant de l'attaque. C'est ce que je veux, et désolé de prendre votre temps. –

+0

@Chris Ford: Je ne comprends pas ce que vous vouliez dire. Corrigez votre question initiale en fonction de votre commentaire. – zerkms

+0

La première solution que vous avez écrite n'était pas ce que je voulais, mais celle-là a fait l'affaire. Merci pour votre réponse. –

0
$summedUp = 3*$data[1]['attack'] + 4*$data[3]['attack'] + 2*$data[2]['attack']; 
+0

Je sais comment le faire manuellement. Le problème est que la limite sera différente à chaque fois et je veux le faire dans une boucle. –