2024年06月13日
5.PHPの配列とループ処理
配列には「添字配列」と「連想配列」があります。
また配列のループ処理には「for」、「while」、「foreach」があります。
ここでは配列の操作方法とループ処理を解説します。
添字配列の作成とデータ取得
添字配列は値のみの配列で、添字は0番目、1番目、2番目…で登録される配列です。
登録は [] (角括弧)または array() を利用します。
$no_array = ['リンゴ' , 'ミカン' ,'パイナップル']; 又は $no_array = array('リンゴ' , 'ミカン' , 'パイナップル');
■0から始まる添字がついて登録されます。
値の取得は [] (角括弧)の中に数字を指定します。
<?php $no_array = ['リンゴ' , 'ミカン' ,'パイナップル']; echo $no_array[0]; ?>
■リンゴが表示されます。
連想配列の作成とデータ取得
連想配列は、キーと値のセットで登録される配列です。
この配列は下記のダブルアロー演算子を使って登録します。
事例 | 解説 |
'キー名' => '値' | =>は、ダブルアロー演算子と呼ばれています。
キー名と値をセットであつかいます。 |
登録は [] (角括弧) または array() を利用します。
$key_array = ['apple' => 'リンゴ' , 'orange' => 'ミカン' , 'pineapple' => 'パイナップル']; 又は $key_array = array('apple' => 'リンゴ' , 'orange' => 'ミカン' , 'pineapple' => 'パイナップル');
■キーと値のセットで登録されます。
又、キーをダイレクトに指定した下記の様な登録も可能です。
$key_array['apple'] = 'リンゴ'; $key_array['orange'] = 'ミカン'; $key_array['pineapple'] = 'パイナップル';
値の取得は [] (角括弧) の中に key を指定して取り出します。
<?php $key_array = ['apple' => 'リンゴ' , 'orange' => 'ミカン' , 'pineapple' => 'パイナップル']; echo $key_array['apple']; ?>
■リンゴが表示されます。
forループ
for はカウンタを使ってループを制御します。
構文
for ( 式1 ; 式2 ; 式3 ){ 処理 }
式1:カウンタの初期値
例)$i = 0;
式2:カウンタの判断式。
値がtrueが場合{処理}を実行。
値がfalseの場合はループを終了します。
例)$i<5;
式3:カウンタ制御(下表参照)
加算子/減算子 | 説明 | 正式な名前 |
$i++ | 現在の$iの値を返します。その後、1を加えます | 後置加算子 |
++$i | 現在の$iに1を加えた値を返します。 | 前方加算子 |
$i-- | 現在の$iの値を返します。その後、1を減算します | 後置減算子 |
--$i | 現在の$iに1を減算した値を返します。 | 前置減算子 |
■一般的には$i++が良く使われています。
事例
1.添字配列からデータを取りだす。
<?php $array = ['リンゴ' , 'ミカン' ,'パイナップル']; for( $i = 0 ; $i<count($array) ; $i++ ) { echo $array[$i].'<br>'; } ?>
■ count() は添字配列や連想配列の要素数をカウントします。
0から始まって3で終了
■結果は下記が表示されます。
リンゴ
ミカン
パイナップル
2.連想配列からデータを取り出す
<?php $array = ['apple' => 'リンゴ' , 'orange' => 'ミカン' , 'pineapple' => 'パイナップル'];// 配列を登録 $key = array_keys($array); // キーを取り出す for( $i = 0 ; $i<count($key) ; $i++ ) { echo $key[$i].':'.$array[$key[$i]].'<br>'; } ?>
■3行目
array_keys() は連想配列からキーを取り出す関数です。結果は添字配列になります。
■4行目
count() は上記の添字配列のキーの要素数をカウントしています。
■結果は下記が表示されます。
apple:リンゴ
orange:ミカン
pineapple:パイナップル
メモ
HTMLベースで for を利用する場合は for():処理endfor; になります。
<?php for($i = 0;$i<count($key);$i++ ):?> <!-- 命令の終わりは(:コロン)です --> <!-- HTML文 --> <?php endfor;?> <!-- 命令の終わりは(;セミコロン)です -->
3.whileループ
PHPの配列は内部ポインターを持っています。whileはこの内部ポインタを利用してループ制御を行います。
構文
while ( 式 ){ 処理 }
式:判断式。
値が true が場合{処理}を実行。
値が false の場合はループを終了します。
式又は処理で利用される関数
内部ポインタ関数 | 説明 |
current() | 引数で指定した配列の内部ポインタが指している値を返します。
データが無い場合は false が返ります。 |
key() | 引数で指定した配列の内部ポインタが指しているキーを返します。
キーが無い場合は null を返します。 |
next() | 引数で指定した配列の内部ポインタを一つ進めて、値を返します。
これ以上ポインタが進められない場合は false が返ります。 |
事例
1.添字配列からデータを取りだす。
下記事例は内部ポインタ関数の current() と next() を利用しています。
<?php $array = ['リンゴ' , 'ミカン' , 'パイナップル']; while(current($array)) { $val = current($array); echo $val.'<br>'; next($array); // 内部ポインタを進めます。※重要です } ?>
■6行目のnext($array)を省くと3行目のcurrent($array)は常にtrueになる為に無限ループになりまので注意して下さい。
■結果は下記が表示されます。
リンゴ
ミカン
パイナップル
2.連想配列からデータを取り出す。
下記事例は内部ポインタ関数の current() と next() と key() を利用しています。
<?php $array = ['apple' => 'リンゴ' , 'orange' => 'ミカン' , 'pineapple' => 'パイナップル']; while(current($array)) { $key = key($array); $val = current($array); echo $key.':'.$val.'<br>'; next($array); // 内部ポインタを進めます。※重要です } ?>
■7行目のnext($array)を省くと3行目のcurrent($array)は常にtrueになる為に無限ループになりますので注意して下さい。
■結果は下記が表示されます。
apple:リンゴ
orange:ミカン
pineapple:パイナップル
メモ
HTMLベースで while を使う場合は while():処理endwhile; を利用します。
<?php while(current($array)) :?> <!-- 命令の終わりは(:コロン)です --> <!-- HTML文 --> <?php endwhile;?> <!-- 命令の終わりは(;セミコロン)です -->
その他の内部ポインタ関数
あまり使いませんが下記の様な内部ポインタ関数もあります。
内部ポインタ関数 | 説明 |
prev() | 引数で指定した配列の内部ポインタを一つ前に戻して、値を返します。
これ以上戻れない場合はfalseが返ります。 |
reset() | 引数で指定した配列の内部ポインタを先頭にリセットし、先頭の値を返します。 |
end() | 引数で指定した配列の内部ポインタ末尾に移動し、末尾の値を返します。 |
4.foreachループ
配列をループ処理するのに最もお勧めなのが、このforeachです。
forはカウンター、whileは内部ポインタを意識する必要がありましたが、foreachは何も意識しないでループを回せます。
構文
foreachには下記の2つの使い方があります。
■foreach(配列名 as $val)
値だけを取り出す場合
■foreach(配列名 as $key => $val)
キーと値を取り出す場合(ダブルアロー演算子で指定します)
事例
1.添字配列からデータを取りだす。
<?php $array = ['リンゴ' , 'ミカン' , 'パイナップル']; foreach($array as $val) { echo $val.'<br>'; } ?>
■カウンターも内部ポインタも意識しないので、簡単です。
■結果は下記が表示されます。
リンゴ
ミカン
パイナップル
2.連想配列からデータを取り出す。
<?php $array = ['apple' => 'リンゴ' , 'orange' => 'ミカン' , 'pineapple' => 'パイナップル']; foreach($array as $key => $val) { echo $key.':'.$val.'<br>'; } ?>
■カウンターも内部ポインタも意識しないので、簡単です。
■結果は下記が表示されます。
apple:リンゴ
orange:ミカン
pineapple:パイナップル
メモ
HTMLベースで foreach を使う場合は foreach():処理endforeach;になります。
<?php foreach($array as $val) :?> <!-- 命令の終わりは(:コロン)です --> <!-- HTML文 --> <?php endforeach;?> <!-- 命令の終わりは(;セミコロン)です -->