【PHP8.x】array_sum()関数の使い方
array_sum関数の使い方について、初心者にもわかりやすく解説します。
基本的な使い方
array_sum関数は、指定された配列に含まれるすべての数値要素を合計し、その結果を返す関数です。この関数を使用することで、配列内の数値の合計値を簡単に計算することができます。
この関数は、一つだけ引数を受け取ります。その引数は、合計を計算したい要素を持つ配列です。配列の各要素は、整数や浮動小数点数などの数値、または数値に変換可能な値である必要があります。
戻り値としては、配列内のすべての要素を合計した数値(整数または浮動小数点数)が返されます。もし配列に数値として解釈できない要素、例えば文字列などが含まれている場合、それらの要素は内部的にゼロとして扱われ、合計には影響しません。そのため、どのようなデータ型の要素が混在していても、数値の部分だけを合計することができます。しかし、意図しない結果を避けるため、可能な限り数値のみを含む配列を渡すことが推奨されます。また、もし引数として渡された配列が空である場合は、合計値は0として返されます。
このarray_sum関数は、ショッピングカート内の商品の合計金額を計算したり、統計データセットの特定の数値列の合計を求めたりするなど、配列内の数値の合計を算出する必要がある様々な場面で非常に役立ちます。非常に直感的で使いやすく、PHPプログラミングにおけるデータ処理の効率を高めることができます。
構文(syntax)
1<?php 2 3$numbers = [1, 2, 3, 4, 5]; 4$sum = array_sum($numbers); 5echo $sum; 6 7?>
引数(parameters)
array $array
PHP:
- array $array: 合計を計算する数値の要素を持つ配列
戻り値(return)
int|float
配列の要素の合計値を返します。要素が整数型の場合は整数型、浮動小数点数型の場合は浮動小数点数型で返されます。
サンプルコード
PHP多次元配列の再帰的合計
1<?php 2 3/** 4 * 多次元配列内のすべての数値要素を再帰的に合計します。 5 * array_sum 関数は単一配列にのみ適用されるため、 6 * 多次元配列全体を合計するにはこのような再帰的なアプローチが必要です。 7 * 8 * @param array $array 合計する多次元配列。 9 * @return int|float 配列内のすべての数値要素の合計。 10 */ 11function sumMultidimensionalArray(array $array): int|float 12{ 13 $totalSum = 0; 14 15 foreach ($array as $value) { 16 if (is_array($value)) { 17 // 要素が配列の場合、再帰的に関数を呼び出し、その内容を合計に加算します。 18 $totalSum += sumMultidimensionalArray($value); 19 } elseif (is_numeric($value)) { 20 // 要素が数値(整数または浮動小数点数)の場合、合計に加算します。 21 $totalSum += $value; 22 } 23 // 非数値、非配列の値(例:文字列、null、真偽値)は無視されます。 24 // これは、array_sum が非数値を暗黙的に(可能な場合は0として)処理するのと同様です。 25 } 26 27 return $totalSum; 28} 29 30// --- 使用例 --- 31 32$myMultidimensionalArray = [ 33 1, 34 [2, 3], 35 4, 36 [5, [6, 7]], 37 '無視される文字列', // is_numeric()によって無視されます 38 null, // is_numeric()によって無視されます 39 [8, 'ここも無視'] // 内部の文字列も無視されます 40]; 41 42// 多次元配列の合計を計算 43$totalSum = sumMultidimensionalArray($myMultidimensionalArray); 44 45// この例では、1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 = 36 が期待されます。 46// var_dump($totalSum); // 必要に応じて結果を確認するためにコメントを外してください 47 48// 別の例 49$anotherMultidimensionalArray = [ 50 [10.5, 20], 51 [30, [40, 50]], 52 ['a', 'b', 60] // 'a', 'b' は無視され、60は合計されます 53]; 54 55$anotherTotal = sumMultidimensionalArray($anotherMultidimensionalArray); 56// この例では、10.5 + 20 + 30 + 40 + 50 + 60 = 210.5 が期待されます。 57// var_dump($anotherTotal); // 必要に応じて結果を確認するためにコメントを外してください
PHPの標準関数であるarray_sumは、与えられた配列内のすべての数値の合計を計算しますが、この関数は一次元配列にのみ適用されます。配列の中にさらに配列が含まれる多次元配列の場合、array_sumだけでは内側の配列の数値を合計することはできません。
この課題を解決するため、サンプルコードではsumMultidimensionalArrayという関数を定義しています。この関数は、引数として受け取った$array内のすべての数値要素を再帰的に合計することを目的としています。関数内部では、まず$totalSumをゼロで初期化し、配列の各要素を順に調べていきます。
もし要素が別の配列であれば、is_array($value)の条件が真となり、この関数自身をその内側の配列に対して再度呼び出します。これにより、配列の深さに関わらずすべての階層をたどって数値を探すことができます。これが「再帰」と呼ばれる処理です。要素が数値である場合(is_numeric($value))、その値を$totalSumに加算します。文字列やnullなど、数値でも配列でもない要素は自動的に無視され、合計には含まれません。
このようにして、sumMultidimensionalArray関数は多次元配列の深部にある数値も適切に合計し、最終的な結果をint型またはfloat型で戻り値として返します。システム開発において、複雑なデータ構造から特定の数値を集計する際に非常に役立つアプローチです。
array_sum関数は単一の配列内の数値のみを合計するため、多次元配列の合計には使用できません。多次元配列内のすべての数値要素を合計するには、本サンプルコードのように、配列を再帰的に探索するカスタム関数を自作する必要があります。このサンプルコードの関数では、is_numeric()を用いて要素が数値であるかを厳密に判別しています。そのため、数値に変換できない文字列やnull、真偽値などの要素は合計から完全に除外されます。これはarray_sumが一部の非数値を暗黙的に0として扱う挙動とは異なる点ですのでご注意ください。最終的な合計値の型は、計算結果に含まれる値に応じて整数(int)または浮動小数点数(float)のいずれかとなります。
PHP array_sumで配列の合計を計算する
1<?php 2 3// array_sum 関数は、配列内のすべての数値の合計を計算します。 4// システムエンジニアを目指す初心者の方へ: 5// この関数は、商品の合計金額を計算したり、データセットの総和を求めたりする際によく利用されます。 6 7// 例1: 整数と浮動小数点数を含む配列の合計を計算する 8$prices = [100, 250.50, 75, 120.75]; 9 10// array_sum 関数を使用して配列 $prices の要素の合計を計算します。 11// 戻り値は int または float になります。 12$totalPrice = array_sum($prices); 13 14// 計算結果を出力します。 15echo "商品の合計金額: " . $totalPrice . "円\n"; 16 17// 例2: 負の数やゼロを含む配列の合計 18$scoreChanges = [-5, 10, 0, 7, -3]; 19 20// $scoreChanges 配列の要素の合計を計算します。 21$totalChange = array_sum($scoreChanges); 22 23echo "合計スコア変化: " . $totalChange . "\n"; 24 25?>
PHPのarray_sum関数は、配列に含まれるすべての数値要素の合計を計算するための非常に便利な関数です。システム開発において、商品の合計金額を求めたり、データセットの総和を計算したりするなど、様々な場面で活用されます。
この関数は、引数として合計を計算したい要素を持つ配列($array)を一つ受け取ります。配列の要素は数値である必要があります。もし配列に数値以外の値(文字列など)が含まれている場合、それらの値は0として扱われ計算から除外されます。
戻り値は、配列内の数値の合計値であり、int(整数)またはfloat(浮動小数点数)のいずれかの型で返されます。配列のすべての要素が整数であればint型、一つでも浮動小数点数が含まれていればfloat型となります。
例えば、$prices = [100, 250.50, 75, 120.75]; のように商品の価格を格納した配列がある場合、array_sum($prices) を実行することで、合計金額である546.25がfloat型で得られます。また、$scoreChanges = [-5, 10, 0, 7, -3]; のように正負の数やゼロを含む配列でも、同様に array_sum($scoreChanges) は9という合計スコア変化をint型で正確に計算します。このようにarray_sum関数は、配列の数値の合計を効率的に計算する非常に便利な機能です。
array_sum関数は、配列内の数値や数値に変換できる文字列を合計します。しかし、数値に変換できない文字列やオブジェクトなどが含まれる場合、PHP 8ではTypeErrorが発生し、プログラムが停止する可能性があります。そのため、配列の要素がすべて数値または数値に変換可能な形式であることを事前に確認することが重要です。また、空の配列を渡すと結果は0となり、合計値が小数点を含む場合はfloat型で返される点も覚えておきましょう。
PHPで条件付き配列合計を実装する
1<?php 2 3/** 4 * 指定された条件に基づいて配列の要素を合計します。 5 * 6 * この関数は、まずarray_filterを使用して元の配列から条件を満たす要素を抽出し、 7 * その後、array_sumを使用して抽出された要素の合計を計算します。 8 * 9 * @param array<int|float> $array 数値を含む配列。 10 * @param callable $condition 各要素に適用する条件を定義するクロージャ(匿名関数)。 11 * クロージャは要素を引数として受け取り、trueまたはfalseを返します。 12 * @return int|float 条件を満たした要素の合計。配列が空の場合や条件を満たす要素がない場合は0が返されます。 13 */ 14function arraySumWithCondition(array $array, callable $condition): int|float 15{ 16 // array_filterを使って、指定された条件に合致する要素のみを抽出します。 17 // クロージャ$conditionが各要素に対して実行され、trueを返した要素のみが残ります。 18 $filteredArray = array_filter($array, $condition); 19 20 // 抽出された配列の合計を array_sum で計算して返します。 21 // array_sumは、配列が空の場合や数値以外の要素がある場合は0を返します。 22 return array_sum($filteredArray); 23} 24 25// --- 使用例 --- 26 27// 数値のサンプル配列を準備します。 28$numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]; 29 30echo "元の配列: " . implode(', ', $numbers) . PHP_EOL; 31 32// 例1: 偶数のみを合計する条件 33// クロージャは、要素が2で割り切れる(偶数である)場合にtrueを返します。 34$sumOfEvenNumbers = arraySumWithCondition($numbers, function (int $number): bool { 35 return $number % 2 === 0; 36}); 37echo "偶数の合計: " . $sumOfEvenNumbers . PHP_EOL; // 期待される出力: 2 + 4 + 6 + 8 + 10 + 12 = 42 38 39// 例2: 5より大きい数値のみを合計する条件 40// クロージャは、要素が5より大きい場合にtrueを返します。 41$sumGreaterThanFive = arraySumWithCondition($numbers, function (int $number): bool { 42 return $number > 5; 43}); 44echo "5より大きい数値の合計: " . $sumGreaterThanFive . PHP_EOL; // 期待される出力: 6 + 7 + 8 + 9 + 10 + 11 + 12 = 63 45 46// 例3: 10未満の奇数のみを合計する条件 47// 複数の条件を論理演算子 (&&, ||) で組み合わせることも可能です。 48$sumOddLessThanTen = arraySumWithCondition($numbers, function (int $number): bool { 49 return ($number % 2 !== 0) && ($number < 10); 50}); 51echo "10未満の奇数の合計: " . $sumOddLessThanTen . PHP_EOL; // 期待される出力: 1 + 3 + 5 + 7 + 9 = 25 52
このサンプルコードは、PHPの配列から特定の条件に合致する要素のみを抽出し、その合計を計算するカスタム関数arraySumWithConditionの利用方法を示しています。この関数は、指定された数値配列と条件を定義するクロージャ(匿名関数)を引数として受け取り、条件を満たす要素の合計を返します。
arraySumWithCondition関数は内部で二つのPHP標準関数を使用しています。まずarray_filter関数は、配列の各要素に$conditionで指定されたクロージャを適用し、クロージャがtrueを返した要素のみを新しい配列として抽出します。次に、抽出された要素の合計を計算するためにarray_sum関数が使われます。array_sumは配列内のすべての数値要素の合計を返す関数です。
引数$arrayには合計対象の数値を含む配列を渡します。引数$conditionには、配列の各要素に対して実行される関数(クロージャ)を指定します。このクロージャは要素を引数として受け取り、その要素を合計に含めるべきであればtrueを、含めないべきであればfalseを返すように実装します。戻り値は、条件を満たした要素の合計値で、整数(int)または浮動小数点数(float)となります。条件を満たす要素が一つもない場合は0が返されます。
使用例では、偶数の合計、5より大きい数値の合計、10未満の奇数の合計といった具体的な条件設定を通じて、arraySumWithCondition関数が柔軟に利用できることが示されています。これにより、配列操作において特定の条件に基づいた集計処理を簡単に行うことが可能です。
このサンプルコードは、array_filterで特定の条件に合う要素だけを抽出し、array_sumでその合計を計算するものです。array_sum関数は、数値型以外の要素が含まれていた場合、それらを無視するか、あるいは0として加算することがありますので、正確な結果を得るためには、引数の配列が数値(intまたはfloat)のみで構成されているかを確認してください。また、array_filterに渡す条件関数(クロージャ)は、必ずtrueかfalseを返すように実装する必要があります。もし条件に合致する要素が一つもない場合や、元の配列が空の場合は、最終的な合計値として0が返されますので、この挙動を考慮して利用してください。引数の型ヒントを理解し、安全なコード作成を心がけましょう。
PHP array_sum で連想配列の合計を計算する
1<?php 2 3/** 4 * array_sum 関数の連想配列での使用例 5 * 6 * このスクリプトは、商品の価格を保持する連想配列を定義し、 7 * array_sum 関数を使ってそれらの価格の合計を計算し、結果を表示します。 8 * array_sum は配列のキーを無視し、値のみを合計します。 9 */ 10 11// 商品名と価格の連想配列を定義します。 12// キーは商品名(文字列)、値は価格(整数)です。 13$itemPrices = [ 14 'Apple' => 120, 15 'Banana' => 80, 16 'Orange' => 150, 17 'Grape' => 300, 18 'Melon' => 800, 19]; 20 21// array_sum 関数を使用して、連想配列の値(価格)の合計を計算します。 22// array_sum は、配列 $array の中のすべての値の合計を int または float で返します。 23// この場合、各商品の価格の合計が計算されます。 24$totalPrice = array_sum($itemPrices); 25 26// 計算された合計価格を出力します。 27echo "商品の合計価格: " . $totalPrice . "円\n"; 28 29?>
PHPのarray_sum関数は、指定された配列に含まれるすべての数値要素を合計し、その結果を返すために使用されます。この関数は、合計の対象となる配列をarray $arrayとして引数に取ります。連想配列を渡した場合でも、array_sumは配列のキーを無視し、値のみを合計します。
このサンプルコードでは、商品の名前と価格を関連付けた連想配列$itemPricesを定義しています。'Apple' => 120のように、キーが商品名、値が価格となっています。array_sum($itemPrices)を実行すると、'Apple'や'Banana'といったキーは合計処理から除外され、120、80などの価格(値)のみが合計されます。
array_sum関数の戻り値は、合計結果が整数であればint型、小数点以下を含む場合はfloat型となります。この例では、すべての価格は整数であるため、合計結果もint型で$totalPrice変数に格納されます。最後に、計算された合計価格が「商品の合計価格: XXX円」という形式で画面に出力されます。array_sum関数を用いることで、配列内の数値の合計を簡潔に計算でき、ECサイトでの注文合計金額計算など、様々な場面で活用できます。
array_sum関数は、連想配列であっても配列の「値」のみを合計します。キーは合計の計算には一切影響しないため、その点を理解しておくことが重要です。配列の値に数値以外の文字列などが含まれる場合、PHP 8ではそれらを数値に変換しようとします。数値に変換できない値(例: 'abc')が含まれていると、警告(Warning)が発生し、その値は0として加算されるため、予期せぬ計算結果にならないよう、配列の値は数値型で統一することが安全です。合計結果が整数に収まらないような大きな値や小数が含まれる場合は、戻り値の型が自動的にfloat(浮動小数点数)になるため、精度の心配なく利用できます。また、空の配列を渡した場合、合計は0となります。