【PHP】foreach文 - 反復処理 / 配列の値とキーを1つずつ取り出す繰り返し処理

【PHP】foreach文 - 反復処理 / 配列の値とキーを1つずつ取り出す繰り返し処理

foreach文は配列の値だけでなくキーも取り出すことができます。

ここではその方法について解説します。

検証環境

foreach文と配列

foreach文は配列から値を1つずつ取り出して処理を繰り返しますが、値のキーも合わせて取り出すことができます。

連想配列などキーの名前に意味があり、キーを取得したい場合に便利な方法です。

基本構文

foreach( 配列 as 変数K => 変数V ) {
    処理
}

配列変数K変数V処理の項目は目的のプログラムに合わせて記述します。

各項目の内容は次の通りです。

項目 内容
配列 値を取り出す配列
変数K 配列から取り出したキーを記憶する変数
変数V 配列から取り出したキーの値を記憶する変数
処理 配列の値を取り出すごとに繰り返す処理

処理の流れ

配列のキーと値を取り出すforeach文の処理の流れを以下に示します。

  1. 配列からキーとその値を1つ取得する
  2. 取り出す値がない場合、終了する。
  3. 取得したキーを変数Kに代入する。
  4. 取得した値を変数Vに代入する。
  5. ブロック(波括弧{})の処理を実行する。
  6. 1に戻る。

サンプル

配列、連想配列、多次元配列を使った3つのサンプルを示します。

配列

<?php
 
$fruits = [
    'Apple',
    'Orange',
    'Grape',
    'Melon',
];

___ih_hl_start
foreach( $fruits as $index => $value ) {
    echo $index." : ".$value."\n";
}
___ih_hl_end

?>
$ php sample1.php
0 : Apple
1 : Orange
2 : Grape
3 : Melon

$indexにキー、$valueに値を記憶したことが実行結果から分かります。

連想配列

<?php
 
 $fruits = [ 
    'Apple'  => 150,
    'Orange' => 100,
    'Grape'  => 300,
    'Melon'  => 2300
];

___ih_hl_start
foreach( $fruits as $key => $value ) {
    echo $key." : ".$value."\n";
}
___ih_hl_end

?>
$ php sample1.php
Apple : 150
Orange : 100
Grape : 300
Melon : 2300

こちらも$keyにキー、$valueに値を記憶したことが実行結果から分かります。

多次元配列

<?php
 
$fruits = [
    [
        'name'  => 'Apple',
        'price' => 150
    ],
    [
        'name'  => 'Orange',
        'price' => 100
    ],
    [
        'name'  => 'Melon',
        'price' => 2300
    ]
];
 
foreach( $fruits as $index => $fruit ) {
    echo "[ {$index} ]\n";
    foreach( $fruit as $key => $value ) {
        echo $key." : ".$value."\n";
    }
}
 
?>
$ php sample1.php
[ 0 ]
name : Apple
price : 150
[ 1 ]
name : Orange
price : 100
[ 2 ]
name : Melon
price : 2300

このように、多次元配列は次元に合わせてforeach文をネストすることで、各次元の値を取り出すことができます。

演習問題

問題1

次の実行結果になる猫の情報を出力するプログラムを作成してください。
なお、下記条件を満たすものとします。

  • 猫の情報は連想配列を使って記憶する
  • 連想配列のキーは'name''birthday''type'とする
  • 連想配列をforeach文で出力する
name : Tama
birthday : 4/24
type : Munchkin

問題2

次の実行結果になる犬の情報を出力するプログラムを作成してください。
なお、下記の条件を満たすものとします。

  • 犬の情報は多次元配列$dogsに記憶
  • 犬の情報は名前、誕生日、種類の3つ
  • 犬の情報は表のとおり
  • 犬の情報は多次元配列をforeach文で出力する
名前 誕生日 種類
1匹目 Pochi 7/24 Maltipoo
2匹目 Leo 11/05 Golden retriever
3匹目 Sora 3/24 Dachshund
0 ----------
name : Pochi
birthday : 7/24
type : Maltipoo

1 ----------
name : Leo
birthday : 11/05
type : Golden retriever

2 ----------
name : Sora
birthday : 3/24
type : Dachshund