2010-10-29 1 views
0

У меня есть массив следующим образом. Я заказываю этот массив по значению ключевой «атаки». Все нормально, до тех пор, но я хочу получить, например, только 9 из этих общих значений атаки суммируются: я хочу подвести итог 3 ключевых1 (3 * 45), 4 ключа 3 (4 * 35) и 2 ключа2 (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

Спасибо за ваш ответ, это действительно полезно, но я забыл указать, что предел будет общей суммой, которая находится в массиве, а не суммой атаки. Это то, чего я хочу, и извините за то, что вы не торопитесь. –

+0

@ Крис Форд: Я не могу понять, что вы имели в виду. Исправьте свой первоначальный вопрос в соответствии с вашим комментарием. – zerkms

+0

Первое решение, которое вы написали, было не тем, что я хочу, но это сделало трюк. Спасибо за ваш ответ. –

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

Я знаю, как сделать это вручную. Проблема в том, что предел будет разным каждый раз, и я хочу сделать это внутри цикла. –