[PHP]多次元連想配列の特定要素の合計値を求める


概要

多次元連想配列の特定要素の合計値を求めるサンプルコード
例えば、以下のような多次元連想配列あったとして、priceの合計を求めるような場合

$vegetables = [
    ['name' => 'パセリ', 'price' => 100],
    ['name' => 'セロリ', 'price' => 200],
    ['name' => 'アブラナ', 'price' => 150]
];

コード

<?php

// PHP5.4未満だと配列の短縮構文が使えないため、従来の書き方にしておく(※内容は概要欄のものに同じ)
$vegetables = array(
    array('name' => 'パセリ', 'price' => 100),
    array('name' => 'セロリ', 'price' => 200),
    array('name' => 'アブラナ', 'price' => 150)
);

echo "PHPのバージョンは" . phpversion() . "です\n";

$priceTotal = 0;
// PHP5.5以上か未満かで求め方が異なる
if (phpversion() >= 5.5) {
    echo "phpバージョン5.5以上の処理を実行します\n";
    $priceTotal = array_sum(array_column($vegetables, 'price'));
} else {
    echo "phpバージョン5.5未満の処理を実行します\n";
    foreach ($vegetables as $vegetable) {
        $priceTotal += $vegetable['price'];
    }
}

echo "期待値: 450\n";
echo "結果: ${priceTotal}\n";

ポイント

PHP5.5以上の場合

array_sum関数とarray_column関数を組み合わせる

 $priceTotal = array_sum(array_column($vegetables, 'price'));

PHP5.5未満の場合

array_column関数が使えないため、ループ文で足しこんでいく
※PHP5.5以上でも使えます

foreach ($vegetables as $vegetable) {
    $priceTotal += $vegetable['price'];
}

終わりに

array_sum関数とarray_column関数を使った書き方のほうが行数少なくてすむし、直感的にもわかりやすい
もし、PHP5.5未満の環境で同じような内容で開発&今後アップグレードの可能性がある場合はコメントアウトで併せて書いておくのがよさそう

参考