2010-10-29 34 views
0

我有一個數組如下。我通過關鍵「攻擊」的值來排列數組。一切都很好,直到那時,但我想要得到的總攻擊值只有9總結:我想總結3 key1(3 * 45),4 key3(4 * 35)和2 key2 (2 * 25)會自動總結。如果有人提供幫助,我將不勝感激。如何基於相同的密鑰,直到在一個陣列的一些點獲得的價值總和?

這裏是數組:

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

);

回答

0

這裏是我的示例實現:

$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

謝謝你的回答,這真的很有幫助,但我忘記說明限制將是陣列中的總量,而不是攻擊量。這是我想要的,並且很抱歉花時間。 – 2010-10-29 01:25:52

+0

@克里斯·福特:我不能讓你的意思。根據您的評論修正您的最初問題。 – zerkms 2010-10-29 01:27:42

+0

你寫的第一個解決方案並不是我想要的,但那個解決方案就是這樣。謝謝您的回答。 – 2010-10-29 01:29:19

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

我知道該怎麼做手工。問題是,限制每次都會有所不同,我想這樣做一個循環內。 – 2010-10-29 01:17:42

相關問題