記事内にはプロモーションが含まれています

【PHP】foreachで連想配列を回す方法!多次元配列の処理やデータの格納まで解説

【PHP】foreachで連想配列を回す方法!多次元配列の処理やデータの格納まで解説 PHP

PHPでWebアプリケーションを開発する際、データベースから取得したデータや、APIのレスポンスなどを扱うために「連想配列」は避けて通れない要素です。

そして、その連想配列の中身を順番に取り出して処理するために必須となるのが foreach 文です。

「キーと値をどうやって取り出すんだっけ?」
「配列の中に配列が入っている(多次元配列)ときはどうすればいい?」
「ループの中で条件に合うものだけを別の配列に追加したい」

このような悩みを持つ方に向けて、この記事ではPHPの foreach を使った連想配列の操作方法を基礎から応用まで徹底的に解説します。

データベースの検索結果のような複雑な多次元配列の扱いや、処理結果を新しい配列に格納するテクニックなど、実務ですぐに使えるコード例も豊富に紹介します。

【本記事の信頼性】
プロフィール
執筆者:マヒロ
  • 執筆者は元エンジニア
  • SES⇒大手の社内SE⇒独立
  • 現在はこじんまりとしたプログラミングスクールを運営
  • モットーは「利他の精神」

foreachで連想配列をループする基本の書き方

まずは、連想配列から「キー(Key)」と「値(Value)」を取り出す最も基本的な構文を確認しましょう。

PHPの foreach は非常に直感的で、配列の要素数だけ繰り返し処理を行ってくれます。

キーと値を両方取得する構文

連想配列の醍醐味である「キー」と、それに対応する「値」を同時に扱いたい場合は、以下のように記述します。

<?php
// 連想配列の定義
$userData = [
    'name' => '田中 太郎',
    'age'  => 28,
    'city' => '東京'
];

// foreachでキーと値を展開
foreach ($userData as $key => $value) {
    echo $key . ": " . $value . "<br>";
}
?>

実行結果

name: 田中 太郎
age: 28
city: 東京

コードの解説

  • $userData as $key => $value: ここがポイントです。=>(ダブルアロー演算子)の左側に「キー」、右側に「値」が入ります。変数名($key, $value)は自由に変更可能です。
  • ループは配列の先頭から順番に行われ、要素がなくなるまで自動的に繰り返されます。

値(Value)だけを取得したい場合

キー(’name’や’age’など)は不要で、中身の値だけを使いたい場合は、キーの指定を省略できます。

<?php
$prices = [
    'apple'  => 150,
    'orange' => 100,
    'grape'  => 300
];

$total = 0;

// 値だけを取り出す(キーは省略)
foreach ($prices as $price) {
    $total += $price;
}

echo "合計金額: " . $total . "円";
?>

実行結果

合計金額: 550円

コードの解説

  • $prices as $price: キーを受け取る変数を記述せず、値を受け取る変数のみを記述します。
  • 通常の配列(インデックス配列)をループする場合と同じ書き方ですが、連想配列でも問題なく動作し、値だけを順番に取り出せます。

【応用】多次元連想配列をforeachで操作する

実務で最も多く遭遇するのが、「連想配列が入った配列」、いわゆる多次元配列の処理です。
データベースから fetchAll などでデータを取得すると、この形式になります。

配列の中の連想配列をループで回す

例えば、複数のユーザー情報が入ったリストを表示するケースを見てみましょう。

<?php
// ユーザーリスト(多次元配列)
$users = [
    [
        'id'   => 101,
        'name' => '佐藤 花子',
        'role' => 'admin'
    ],
    [
        'id'   => 102,
        'name' => '鈴木 一郎',
        'role' => 'editor'
    ],
    [
        'id'   => 103,
        'name' => '高橋 次郎',
        'role' => 'user'
    ]
];

// 外側の配列をループ
foreach ($users as $user) {
    // $user には内側の連想配列が一つずつ入る
    echo "ID:" . $user['id'] . " / 名前:" . $user['name'] . "<br>";
}
?>

実行結果

ID:101 / 名前:佐藤 花子
ID:102 / 名前:鈴木 一郎
ID:103 / 名前:高橋 次郎

コードの解説

  • 多次元配列の構造: $users は「0番目、1番目…」というインデックスを持つ通常の配列ですが、その中身(要素)の一つ一つが連想配列になっています。
  • foreach ($users as $user): 1回のループで、1人分のデータ(連想配列)が $user に格納されます。
  • $user['name']: ループ内では、$user は単なる連想配列なので、キーを指定して値にアクセスします。ネスト(入れ子)したforeachを書く必要はありません。

foreach内でデータを加工して別の配列に格納する

ループ処理の中で、特定の条件に合うデータだけを抽出したり、データを加工して新しい配列を作ったりしたい場面もよくあります。

特定のキーの値を抽出して新しい配列に追加する

「ユーザーリストから、メールアドレスだけのリストを作りたい」といった場合の処理です。

<?php
$members = [
    ['name' => 'Yamada', 'email' => 'yamada@example.com', 'isActive' => true],
    ['name' => 'Tanaka', 'email' => 'tanaka@example.com', 'isActive' => false],
    ['name' => 'Kato',   'email' => 'kato@example.com',   'isActive' => true],
];

// メールアドレスを格納するための空配列
$emailList = [];

foreach ($members as $member) {
    // アクティブなユーザーのみ抽出
    if ($member['isActive']) {
        // 配列に追加(格納)する
        $emailList[] = $member['email'];
    }
}

print_r($emailList);
?>

実行結果

Array
(
    [0] => yamada@example.com
    [1] => kato@example.com
)

コードの解説

  • $emailList = []: ループの外で、データを入れるための空の配列を初期化しておきます。
  • $emailList[] = ...: PHPでは [] を使って代入することで、配列の末尾に要素を自動的に追加(push)できます。array_push 関数を使うよりも簡潔で高速です。
  • if 文と組み合わせることで、必要なデータだけのリスト(フィルタリング結果)を簡単に作成できます。

連想配列の値を直接書き換える(参照渡し)

通常、foreach 内で取り出した変数($value など)を変更しても、元の配列の中身は変わりません。

元の配列の値を直接書き換えたい場合は、参照渡し(リファレンス)を利用します。

&(アンパサンド)を使って値を変更する

変数の前に & を付けることで、値のコピーではなく「その場所への参照」を扱えるようになります。

<?php
$products = [
    'pen'      => 100,
    'notebook' => 200,
    'eraser'   => 50
];

// 値の前に & を付けて参照渡しにする
foreach ($products as $key => &$price) {
    // 価格を1.1倍(税込み)にして上書き
    $price = $price * 1.1;
}
// 参照の解除(重要)
unset($price);

print_r($products);
?>

実行結果

Array
(
    [pen] => 110
    [notebook] => 220
    [eraser] => 55
)

コードの解説

  • &$price: ここに & を付けることで、$price への変更が $products 配列内の実際の値に反映されます。
  • unset($price): これは非常に重要です。 foreach が終わっても $price は最後の要素(eraserの値)への参照を保持し続けます。後続の処理で $price をうっかり使うと、配列の最後の要素が意図せず書き換わるバグの原因になります。参照渡しを使ったループの直後には、必ず unset で参照を解除する癖をつけましょう。

PHPのスキルを活かして年収を上げる方法

以上、PHPのforeachで連想配列を回す方法について解説してきました。

なお、PHPのスキルがある場合には、「転職して年収をアップさせる」「副業で稼ぐ」といった方法を検討するのがおすすめです。

PHPエンジニアの需要は非常に高く求人数・案件数も多いため、転職によって数十万円の年収アップはザラで、100万円以上年収が上がることも珍しくありません。

なお、転職によって年収を上げたい場合は、エンジニア専門の転職エージェントサービスを利用するのが最適です。

今すぐ転職する気がなくとも、とりあえず転職エージェントに無料登録しておくだけで、スカウトが届いたり、思わぬ好待遇の求人情報が送られてきたりするというメリットがあります。

併せて、副業案件を獲得できるエージェントにも登録しておくと、空いている時間を活かして稼げるようなPHPの案件を探しやすくなります。

転職エージェントも副業エージェントも、登録・利用は完全無料なので、どんな求人や副業案件があるのか気になる方は、気軽に利用してみるとよいでしょう。