Let's suppose you have an array of items like the following:
$items = [
'item_1' => ['id' => 1, 'name' => 'Pink Shirt', 'qty' => 2],
'item_2' => ['id' => 2, 'name' => 'Blue Shirt', 'qty' => 3],
];
To sum the values of a specific key (such as qty
) in the array, you can use any of the following:
Using the foreach
Loop
You can simply use the foreach
loop to sum values of a specific key in an array, for example, in the following way:
// PHP 4+
$sum = 0;
foreach ($items as $item) {
$sum += $item['qty'];
}
echo $sum; // 5
Although the code spans a few lines, this would be the fastest way as it's using the language construct foreach
rather than a function call (which is more expensive).
Using array_sum()
and array_column()
Using the array_column()
function, you can get an array of all values from a single column in the input array:
// PHP 5.5+
$itemsQty = array_column($items, 'qty');
echo print_r($itemsQty); // Array ( [0] => 2 [1] => 3 )
You can then pass the resulting array as an argument to the array_sum()
function to calculate and return the sum of all values in that array:
// PHP 5.5+
$itemsQty = array_column($items, 'qty');
echo array_sum($itemsQty); // output 5
Using array_sum()
and array_map()
Using the array_map()
function, you can apply a callback function to each element of the array. You can use this to simply return values of a specific key in the array:
// PHP 4+
function mapArray($item) {
return $item['qty'];
}
$itemsQty = array_map('mapArray', $items);
echo print_r($itemsQty); // Array ( [item_1] => 2 [item_2] => 3 )
You can then pass the resulting array as an argument to the array_sum()
function to calculate and return the sum of all values in that array:
// PHP 4+
function mapArray($item) {
return $item['qty'];
}
$itemsQty = array_map('mapArray', $items);
echo array_sum($itemsQty); // 5
In PHP 5.3+, you may pass in an anonymous callback function directly to the array_map()
function:
// PHP 5.3+
echo array_sum(array_map(function($item) {
return $item['qty'];
}, $items)); // 5
In PHP 7.4+ you may use the shorter syntax with arrow functions:
// PHP 7.4+
echo array_sum(array_map(fn ($item) => $item['qty'], $items)); // 5
Using array_reduce()
You can iteratively sum values of a specific array key and reduce the result to a single value using the array_reduce()
function, for example, like so:
// PHP 4+
function sumValues($carry, $item) {
$carry += $item['qty'];
return $carry;
}
echo array_reduce($items, 'sumValues'); // 5
In PHP 5.3+, you may pass in an anonymous callback function directly to the array_reduce()
function:
// PHP 5.3+
echo array_reduce($items, function($carry, $item) {
$carry += $item['qty'];
return $carry;
}); // 5
This post was published (and was last revised ) by Daniyal Hamid. Daniyal currently works as the Head of Engineering in Germany and has 20+ years of experience in software engineering, design and marketing. Please show your love and support by sharing this post.