前提
例えば、レジみたいなプログラム組むときにこんな感じの連想配列にぶち当たることがあるかと思います。
品名(name) | 金額(price) |
---|---|
ナナチ | 100 |
ストロングゼロ | 118 |
で、こいつの総額の計算を出したいって思うことがあると思うんですよ。
これくらいなら暗算とか言わないでプログラムで計算してくださいね。
PHPで書く
PHPだとこんな感じに書けると思います。
$items = [
['name' => 'ナナチ', 'price' => 100],
['name' => 'ストロングゼロ', 'price' => 118],
];
// PHP7以前の書き方
$sub_total = array_sum(array_map(function($i){
return $i['price'];
}, $items));
// PHP8以降の書き方
$sub_total = array_sum(array_map(fn($i) => $i['price'], $items));
echo $sub_total; // 218
この array_sum()
という関数は「引数にとった配列の合計値を出す」ってやつなのです。
便利ですよね。
https://www.php.net/manual/ja/function.array-sum.php
JavaScriptで書く
んで、JavaScriptなんですけど、 array_sum()
相当のものはないです。
その代わり Array.prototype.reduce()
というのを使います。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce
ってなわけでこんな感じになります。
const items = [
{'name': 'ナナチ', 'price': 100},
{'name': 'ストロングゼロ', 'price': 118},
];
const subTotal = items.reduce((accumulator, currentValue) => {
return accumulator + currentValue.price;
});
console.log(subTotal); // 218
参考に
PHPにも array_reduce()
はあります。
https://www.php.net/manual/ja/function.array-reduce.php
さっきのを array_reduce()
で書くとこんな感じですかね?
$items = [
['name' => 'ナナチ', 'price' => 100],
['name' => 'ストロングゼロ', 'price' => 118],
];
// PHP7以前の書き方
$sub_total = array_reduce($items, function($carry, $item){
return $carry + $item['price'];
});
// PHP8以降の書き方
$sub_total = array_reduce($items, fn($carry, $item) => $carry + $item['price']);
echo $sub_total; // 218
意外とスッキリ書けるもんですね。array_mapするくらいならこっちでもいいのかも。
もうちょい詳しくはこちら。