Как получить сумму значения на основе того же ключа до некоторой точки в массиве? - PullRequest
0 голосов
/ 29 октября 2010

У меня есть массив следующим образом. Я упорядочиваю этот массив по значению ключа «атака». Пока все в порядке, но я хочу получить, к примеру, только 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')

);

Ответы [ 2 ]

0 голосов
/ 29 октября 2010

Вот мой пример реализации:

$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 голосов
/ 29 октября 2010
$summedUp = 3*$data[1]['attack'] + 4*$data[3]['attack'] + 2*$data[2]['attack'];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...