関数

関数とは

  • 関数とは、「機能単位の処理のひとかたまり」のことで、プログラムは関数の組み合わせによって、構成されています
  • プログラムのソースが長文で複雑になった場合、機能別にいくつかの関数に分割することによって、分かりやすく、修正しやすいプログラムとなります
  • 標準関数と同様でプログラムロジックの再利用ができるようになります

関数の作成

  • 自分で作る関数は機能単位で作成します
  • その機能のプログラムを再利用できるようにするためです
関数の構文

function 関数名( 【引数1, 引数2, 引数3・・・】 ) {
   処理;
【return文;】
}

<?php

// 関数

// 引数
// 戻り値

function sayHi($name = 'taguchi') {
    return 'hi!' . $name;
}

echo sayHi();

// sayHi( 'tanaka' );


関数名の定義

  • 関数には関数名が必ず必要です
  • 関数の名前を付けます
  • 関数に名前を付けることによって他のプログラムで呼び出して利用することができるようになるのです
  • 関数名は任意ですが、予約語PHPで既に使用している関数名など)は使用しないようにします
  • また、関数の機能がイメージできるような名前にします


引数用の括弧()を記述

  • 関数名の後ろには、「()(括弧)」を書きます
  • これは、引数(値を受け取るための変数)を記述するためのものです


引数の定義

  • 引数用の括弧()の中に値の受け渡しが必要な数だけ、変数を定義します。ここでは2つ定義しています
  • 値の受け渡しがない場合は、定義する必要はありません


処理用の中括弧{}と処理の記述

  • 引数を受けるための「()(括弧)」の後は、「{}(中括弧)」を書きます
  • この中括弧の中にこの関数の処理内容を記述します
  • 関数の処理は、その関数の機能である処理内容を記述します
  • そして、計算結果やファイル内容など、処理結果を呼び出し元のプログラムに戻したい場合は、通常一番最後に、return文という構文を記述します
  • これを戻り値と呼びます

引数と戻り値

  • 引数と戻り値は、関数とその関数を利用するプログラムとの間でやりとりする値です
  • 値をやりとりすることによって、処理を進めていきます
  • 引数は、関数を呼び出すプログラムが引き渡す値です
引数
  • 引数は、実行するプログラムが関数に引き渡す値で、関数名の後にある「( )(括弧)」の中に記述します
  • 「( )(括弧)」の中に複数の変数を定義すれば、複数のデータを引き受けることができます。

関数名( 変数1, 変数2, 変数3,・・ )

  • 引数の値を持っている場合

function getAvg( $x, $y, $z ) { // 引数3つを引き受ける変数定義
・・・・・・・・ // この関数の処理内容を記述

return 戻り値;
}

  • 引数が無い場合

function getAvg( ) {
・・・・・・・・ // この関数の処理内容を記述

return 戻り値;
}

戻り値
  • 戻り値は、先に学習したように、関数の処理結果を呼び出し元のプログラムに戻す役割があります
  • 例えば、計算した結果、ファイルから取得したデータなどです
  • 関数の処理が記述されている中括弧{}の中の一番最後にreturn文として記述します

function 関数名( 引数1, 引数2, 引数3・・・) {
・・・・・・・・ // この関数の処理内容を記述

return 戻り値;// 処理した結果の値
}

  • 引数の$xと$yと$zの平均値を戻り値として返している場合
function getAvg( $x, $y, $z ) {  // 引数3つを引き受ける変数定義
    $avg = ( $x + $y + $z ) / 3; // この関数の処理内容を記述
    
    return $avg;// 戻り値
}


引数として点数の数字が引き渡されて、その点数を基に評価判定を行う関数です。戻り値として、評価判定のA、B、C、D、Eのどれかが戻されます。

function getHyoka( $tensu ) {  // 引数1つを引き受ける変数定義

    // 注意:変数$tensu、$hyokaは、{ }内でのみ使用可能です。

    if( $tensu >= 80 ) {
        $hyoka = 'A';
    }else if( $tensu >= 70 ) {
        $hyoka = 'B';
    }else if( $tensu >= 60 ) {
        $hyoka = 'C';
    }else if( $tensu >= 50 ) {
        $hyoka = 'D';
    }else{
        $hyoka = 'E';
    }
    
    return $hyoka;  // 戻り値
}


戻り値がない関数

  • 関数内で何らかの処理を行いますが処理結果を返さないケースです
  • 評価を取得する関数を変更して、評価結果を画面出力する関数にしています
  • 評価結果を表示するのみで戻り値はありません
function getHyoka( $tensu ) {// 引数1つを引き受ける変数定義

    // 注意:変数$tensu、$hyokaは、{ }内でのみ使用可能です。

    if( $tensu >= 80 ){
        $hyoka = 'A';
    }else if( $tensu >= 70 ){
        $hyoka = 'B';
    }else if( $tensu >= 60 ){
        $hyoka = 'C';
    }else if( $tensu >= 50 ){
        $hyoka = 'D';
    }else{
        $hyoka = 'E';
    }
    
    printf ( "評価は、%sです。", $hyoka );
}

関数の利用

  • 関数を利用することを、「関数を呼び出す」とも言います
  • 関数の呼び出し方は、処理の中でその関数名を記述し、引数があれば値を括弧()の中に記述、戻り値があれば戻り値を代入する変数を記述するだけです

配列の 追加と削除

配列に要素を追加

  • 配列に要素を追加したい場合は、array_unshift関数、array_push関数を使います
  • この関数は、配列に要素を追加するとともに、要素が追加された配列の要素数を取得できます


array_unshift - 配列の先頭に要素を追加したい場合

配列の先頭に要素を追加した後の要素数 = array_unshift( 要素を追加したい配列変数名, 追加したい要素1, 追加したい要素2,・・・ );


array_push - 配列の最後に要素を追加したい場合

配列の最後に要素を追加した後の要素数 = array_push( 要素を追加したい配列変数名, 追加したい要素1, 追加したい要素2,・・・ );

<?php
  // 配列変数$fruitの宣言と初期化
  $fruit = array ( 'いちご' );
  
  // 配列の先頭に要素を追加します
  $cnt = array_unshift ( $fruit, 'りんご', 'すいか' );
  
  echo $fruit[0] . '<br>';  // 配列の先頭要素'りんご'を表示します
  
  echo $fruit[1] . '<br>';  // 配列の次の要素'すいか'を表示します
  
  echo $fruit[2] . '<br>';  // 配列のその次の要素'いちご'を表示します

  echo $cnt;  // 要素追加後の配列要素数「3」を表示します
  • 最初にいちごが格納されている配列に、array_unshift関数を使用して、りんごとすいかを配列の先頭に追加しています
<?php
  // 配列変数$stationの宣言と初期化
  $station = array ( '上野' );
  
  // 配列の最後に要素を追加します
  $cnt = array_push ( $station, '秋葉原', '銀座' );
  
  echo $station[0];  // 配列の先頭要素'上野'を表示します
  echo '<br>';
  
  echo $station[1];  // 配列の次の要素'秋葉原'を表示します
  echo '<br>';
  
  echo $station[2];  // 配列のその次の要素'銀座'を表示します
  echo '<br>';
  
  echo $cnt;  // 要素追加後の配列要素数「3」を表示します
  echo '<br>';
  • 最初に上野が格納されている配列に、array_push関数を使用して、秋葉原と銀座を配列の最後に追加しています

配列の要素を削除

  • 配列の要素を削除したい場合は、array_shift関数、array_pop関数を使います


配列の先頭から要素を削除したい場合

array_shift - 削除した要素 = array_shift( 要素を削除したい配列変数名 );


配列の最後から要素を削除したい場合

array_pop - 削除した要素 = array_pop( 要素を削除したい配列変数名 );

<?php
  // 配列変数$kenの宣言と初期化
  $ken = array ( '秋田', '長崎', '神奈川' );
  
  // 配列の先頭から要素を削除します
  $del_ken = array_shift( $ken );
  
  // 削除した要素を表示します
  echo $del_ken;
  echo '<br>';
  
  // 配列の要素数を表示します
  echo count( $ken );
  echo '<br>';
  • 最初に秋田、長崎、神奈川が格納されている配列に、array_shift関数を使用して、先頭の秋田を削除しています
<?php
  // 配列変数$recipeの宣言と初期化
  $recipe = array ( 'パスタ', 'うどん', 'カレー' );
  
  // 配列の最後から要素を削除します
  $del_recipe = array_pop ( $recipe );
  
  // 削除した要素を表示します
  echo $del_recipe;
  echo '<br>';
  
  // 配列の要素数を表示します
  echo count ( $recipe );
  echo '<br>';
  • 最初にパスタ、うどん、カレーが格納されている配列に、array_pop関数を使用して、最後のカレーを削除しています

配列をループ

  • foreach
<?php

// 配列に関するループ

$youbi = array("Sun", "Mon", "Tue");
$sales = array("tanaka"=>150, "taguchi"=>200);

// foreach

/*
foreach ($youbi as $y) {
    echo $y;
}
*/

foreach ($sales as $name => $amount) {
    echo $name, $amount;
}

連想配列

連想配列

  • 基本的な配列の場合、配列要素の0番目、1番目・・・と添え字に数値を指定して、各要素の値を代入したり取得していましたが、連想配列を使用すると、添え字の代わりに文字列のキーを使用できます
  • インデックスに名前をつける
  • 中身を連想できるようなインデックスをもつ配列

配列変数名 = array( キー=>値1, キー=>値2, キー=>値3・・・);

連想配列を作成
  • 内容が連想できるインデックスをつけておきます
  • インデックスと値は「=>」でつなぎます
<?php
  // 連想配列変数$presentの宣言と初期化
  $present = array ( '長崎'=>'チャンポン', '名古屋'=>'手羽先', '沖縄'=>'泡盛' );

  // キーを指定して、値を取得します
  echo $present['長崎'];
  echo '<br>';
  
  // キーを指定して、値を取得します
  echo $present['名古屋'];
  echo '<br>';
  
  // キーを指定して、値を取得します
  echo $present['沖縄'];
  echo '<br>';
  • 曜日別の売上個数で計算
<?php
$sales = array('sun'=>10, 'mon'=>20, 'tue'=>30, 'wed'=>40, 'thu'=>50, 'fri'=>60,'sat'=>70);
echo '土日の合計は' . ( $sales['sat'] + $sales['sun'] ) . 'です';
値からキーを取得
  • 連想配列の値からキーを取得することもできます

取得したキー = array_search( 検索する値, 検索対象の連想配列変数名 );

<?php
  // 連想配列変数$priceの宣言と初期化
  $price = array ( '4'=>'500円', '1'=>'1000円', '2'=>'20円', '3'=>'50円');
  
  $code = array_search( '20円', $price );

  echo '20円のキーは' . $code . 'です。';

配列操作関数

  • PHPは、さまざまな配列操作関数が用意されています
  • 関数とは、機能単位の処理のひとかたまりで、期待する値を返してくれます
  • 返却される値のことを戻り値と言い、戻り値は用意した変数に代入することができます
配列の要素数を取得(配列の要素数を知る)
  • 配列の要素数を調べるときには、count関数を使います

conut( $配列変数名 )

<?php 
  $city[0] = '東京';
  $city[1] = '名古屋';
  $city[2] = '京都';
  $city[3] = '大阪';
  $city[4] = '福岡';
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>配列の要素数を知る</title>
</head>
<body>
<table border="1" width="100">
<tr><th>都市名</th></tr>
<?php
  for ( $i = 0; $i < count( $city ); $i++ ) {
    echo '<tr><td>' . $city[$i] . '</td></tr>' . "\n";
  }
?>
</table>
</body>
</html>

配列の値の取得

  • 配列の各要素の値を取得するには、代入と同様に添え字を使って、各要素にアクセスします
$配列名[キー]で取り出す
<?php
  // 配列変数$nameの宣言と初期化
  $city = array( '東京', '千葉', '神奈川' );
  
  // "東京"を出力します
  echo $city[0] . '<br>';
  
  // "千葉"を出力します
  echo $city[1] . '<br>';

  // "神奈川"を出力します
  echo $city[2] . '<br>';

for文を使う

<?php
$color = array ( 'red', 'olive', 'yellow', 'green', 'blue', 'purple' );

for ( $i = 0; $i <= 5; $i++ ){
    echo $color[$i] . '<br>';
}

count関数を使う

  • 配列の要素数調べて利用する
<?php
$color = array ( 'red', 'olive', 'yellow', 'green', 'blue', 'purple' );
$c = count ( $color );

for ( $i = 0; $i <= $c-1; $i++ ){
    echo $color[$i] . '<br>';
}

list関数を使う

  • 配列の要素と同じ順番で、指定した変数に値を代入します

list( 変数1, 変数2, 変数3・・・ ) = 配列変数名

<?php
$a = array( 'きつね', 'ねこ', 'こあら' );

  list( $x, $y, $z ) = $a;
  echo $x . '' . $y . '' . $z;
<?php
  // 配列変数$food_dataの宣言と初期化
  $food_data = array ( 'たこ焼き', '8個', '350円' );
  
  // 配列要素を各変数に代入
  list ( $food, $count, $price ) = $food_data;
  
  echo $food . '<br>';
  echo $count . '<br>';
  echo $price . '<br>';

print_r関数を使う

  • 「print_r」は、変数に関する情報を表示する関数です
  • 「print_r」の引数に配列を指定すると、すべての要素の「キー」と「値」をわかりやすい形式で表示します
  • 配列の値を表示したいだけなら「print_r」を使うことが最も簡単です
<?php
$color = array( 'red', 'olive', 'yellow', 'green', 'blue', 'purple' );

  echo '<pre>';
  print_r( $color );
  echo '</pre>';

変数のスコープ

変数のスコープ

  • 変数の宣言方法を変えることにより、変数の有効範囲も変わります
  • これを変数のスコープと呼びます
  • 変数は、「{ }(中括弧)」で囲まれた中で定義をすると、その囲まれた中でのみ有効となります。その外側では、使用することができません
  • 括弧内の処理が終了すると、その変数はアクセスできないだけではなく、やがてメモリー上からも消えてしまいます
  • しかし、グローバル変数、スーパーグローバル変数は有効範囲(スコープ)が広がり、「{ }(中括弧)」の外でも使用できるようになります
<?php

// 関数
// ローカル変数(変数のスコープ)

$myname = 'ruby';

function sayHi( $name = 'taguchi' ) {
    $myname = 'php'; // ローカル変数
    return 'hi!' . $name . 'from' . $myname;
}

echo sayHi();
echo $myname;

グローバル変数

<?php
  $a = 1;

  function OutPut() {  // "$aの値(OutPut()内)は「」です"が出力されます
    echo '$a' . 'の値(OutPut()内)は「' . $a . '」です<br>';    /* ローカル変数の参照 */ 
  } 

  OutPut();
    
  // "$aの値(OutPut()内)は「1」です"が出力されます
  echo $a . 'の値(OutPut()外)は「' . $a . '」です';
?>


《実行結果》

  $aの値(OutPut()内)は「」です
  $aの値(OutPut()外)は「1」です


関数内で$aの値が出力されないのは、OutPut関数の{ }内で、グローバル変数の宣言を行っていないからです。
ローカル変数である$aに対して(OutPut関数の{ }内で)代入処理を行っていないため、値は設定されないのです。

  • 以下のようにOutPut関数の{ }内で、$aに対してグローバル変数宣言を行えば使えるようになります
<?php
  $a = 1;

  function OutPut() { 
    global $a;  /* グローバル変数として宣言する */ 
        
    // "$aの値(OutPut()内)は「1」です"が出力されます
    echo $a . 'の値(OutPut()内)は「' . $a . '」です<br>';
    } 

    OutPut();
    
    // $aの値(OutPut()外)は「1」です"が出力されます
    echo $a . 'の値(OutPut()外)は「' . $a . '」です';
?>
  • このように、globalを宣言することにより、関数の{ }内でも関数の{ }外でも使用可能となります

スーパーグローバル変数

  • globalを宣言する以外に、スーパーグローバルと呼ばれている$GLOBALSという連想配列を使って変数の有効範囲を意識することなく使用する方法もあります

$GLOBALS[ '変数名' ];

<?php
  $a = 1;

  function OutPut() {
    // 連想配列$GLOBALSのキーとして、$aを指定
    // これにより$aは関数の外でも使用可能となります
    $GLOBALS[ 'a' ] = $GLOBALS[ 'a' ] + $GLOBALS[ 'a' ] + 8;
  } 

  OutPut();
    
    // 10 が出力されます
    print $a. '<br>';
    
    // 10 が出力されます
    echo $GLOBALS[ 'a' ];
?>

配列

配列(array)とは

  • たくさんの変数を扱うときなど、値をまとめて記憶する
  • 関連したデータを保存しておくための連なった箱
  • 1番目の番号(インデックスまたは添字)は、「0」
配列の宣言と代入
  • 「array関数」を使用して配列の宣言
  • array関数を使わず、各配列要素に直接を代入

配列宣言のみを行う場合

配列変数名 = array ();

配列の宣言と初期化を行う場合

配列変数名 = array ( 値1, 値2, 値3・・・);

<?php
// 配列
$youbi = array('Sun', 'Mon', 'Tue');

// echo $youbi[2];

$youbi[] = 'Wed';
$youbi[0] = 'Sunday';
unset($youbi[2]);

var_dump($youbi);


《例》

<?php
    // 配列変数$nameを宣言し、各要素を設定して初期化しています
    $name = array( '佐藤', '山田', '鈴木' );
    echo ( $name[0].'さん、'.$name[1].'さん、'.$name[2].'さん' );

配列の利用

  • 「配列」でまとめて管理
  • メッセージをまとめて管理する方法を考える
効率的ではなさそうな方法
$sun = '今日は定休日です';
$mon = '9時~22時まで営業';
$tue = '9時~22時まで営業';
$wed = '特売日! 7時~24時まで営業';
$thu = '9時~22時まで営業';
$fri = '9時~22時まで営業';
$sat = '12時~20時まで営業';
効率的に「引き出し」に整理する
  • メッセージをしまう引き出し(メッセージ1、メッセージ2、メッセージ3・・・)
曜日ごとのメッセージ {
 '今日は定休日です',
 '9時~22時まで営業',
 '9時~22時まで営業',
 '特売日! 7時~24時まで営業',
 '9時~22時まで営業',
 '9時~22時まで営業',
 '12時~20時まで営業'
}


曜日ごとの規則性

  • 1段目:日曜日のメッセージ(曜日番号:0)
  • 2段目:月曜日のメッセージ(曜日番号:1)
  • 3段目:火曜日のメッセージ(曜日番号:2)
  • 4段目:水曜日のメッセージ(曜日番号:3)
  • 5段目:木曜日のメッセージ(曜日番号:4)
  • 6段目:金曜日のメッセージ(曜日番号:5)
  • 7段目:度曜日のメッセージ(曜日番号:6)


「曜日番号」とは、date関数「date('w')」で取得できる各曜日の番号です。

複数の値を「引き出し」にまとめて管理

  • 「配列」を使う
  • 1つの変数に複数の値を格納できる
配列の使い方
  • 複数の項目をカンマで区切ってまとめる
  • 「array」という命令を使う
$message = array {
    '今日は定休日です',
    '9時~22時まで営業',
    '9時~22時まで営業',
    '特売日! 7時~24時まで営業',
    '9時~22時まで営業',
    '9時~22時まで営業',
    '12時~20時まで営業'
}


この配列に対して番号を指定すれば、その値を参照したり変更したりできます。


位置

要素の値 参照するとき
1番目 今日は定休日です $message[0]
2番目 9時~22時まで営業 $message[1]
3番目 9時~22時まで営業 $message[2]

配列で管理された曜日ごとのメッセージを表示する
<?php
$message = array (
    '今日は定休日です',
    '9時~22時まで営業',
    '9時~22時まで営業',
    '特売日! 7時~24時まで営業',
    '9時~22時まで営業',
    '9時~22時まで営業',
    '12時~20時まで営業'
);

$w = date('w');
	echo $message[$w];
?>
  • 実行結果「火曜日の場合」


配列「array構文」の書き方

  • 生成した配列は、「添え字(そえじ)」を使って管理されます
  • 添え字は、0から始まり大きさがnの配列では0から(n-1)が添字の番号になります
  • 配列の各領域は、要素と呼びます
  • 配列の各要素は、添え字を使って、表現します



$配列名 = array( 値1, 値2, 値3, … );

$city = array( '東京', '千葉', '神奈川' );
  • 配列の最後に要素を追加するには、変数名に[ ](半角の角括弧)をつけて、追加する値を指定します
$city = array( '東京', '千葉', '神奈川' );
$city[] = '埼玉';
  • 配列の値を変更するには、要素番号を指定して、変更後の値を指定します
  • 先頭の要素「東京」が「埼玉」に変更されます
$city = array( '東京', '千葉', '神奈川' );
$city[0] = '埼玉';
配列要素に値を代入する
  • 配列に値を記憶するには、添字を使って要素を指定し、値を代入する

$配列名[添字]= 値;

  • array関数を使わず、以下のように各配列要素に直接、値を代入する
<?php 
  $product[0] = '鉛筆';
  $product[1] = '消しゴム';
  $product[2] = '定規';
  $product[3] = 'コンパス';
  $product[4] = 'ボールペン';
配列要素に値を出力する

各要素の指定をするときの添字に変数を使う

<?php
  $product[0] = '鉛筆';
  $product[1] = '消しゴム';
  $product[2] = '定規';
  $product[3] = 'コンパス';
  $product[4] = 'ボールペン';
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>配列の値を出力する</title>
</head>
<body>
<table border="1" width="100">
<tr><th>商品名</th></tr>
<?php
for ( $i = 0; $i < 5; $i++ ) {
  echo '<tr><td>' . $product[$i] . '</td></tr>' . "\n";
}
?>
</table>
</body>
</html>  
キーによる格納
  • 配列の添字として文字列を使う

$配列名[ 'キー' ]= 値;

<?php 
  $stock[ 'みかん' ] = 80;
  $stock[ 'いちご' ] = 60;
  $stock[ 'りんご' ] = 22;
  $stock[ 'もも' ] = 50;
  $stock[ 'くり' ] = 57;
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>キーを使う</title>
</head>
<body>
<table border="1" width="120">
<tr><th>在庫状況</th></tr>
<?php
  echo '<tr><td>みかんは' . $stock[ 'みかん' ] .'個</td></tr>' . "\n";
  echo '<tr><td>いちごは' . $stock[ 'いちご' ] . '個</td></tr>' . "\n";
  echo '<tr><td>りんごは' . $stock[ 'りんご' ] . '個</td></tr>' . "\n";
  echo '<tr><td>ももは' . $stock[ 'もも' ] . '個</td></tr>' . "\n";
  echo '<tr><td>くりは' . $stock[ 'くり' ] . '個</td></tr>' . "\n";
?>
</table>
</body>
</html> 
キーと値で繰り返し文
  • 配列を扱う際、foreach文と呼ばれる特殊な繰り返し文を使うことができます
  • キー用の変数と値用の変数を用意し、配列のキーと値を格納することができます

foreach($配列名 as $キー用の変数 => $値用の変数){
 …
}

  • 値だけを格納する場合

foreach($配列名 as $値用の変数){
 …
}

<?php 
  $stock[ 'みかん' ] = 80;
  $stock[ 'いちご' ] = 60;
  $stock[ 'りんご' ] = 22;
  $stock[ 'もも' ] = 50;
  $stock[ 'くり' ] = 75;
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>foreach文を使う</title>
</head>
<body>
<table border="1" width="160">
<tr><th>商品名</th><th>在庫状況</th></tr>
<?php
  foreach ( $stock as $name => $value ) {
    echo '<tr><td>' . $name . '</td><td>' . $value . '個</td></tr>' . "\n";
}
?>
</table>
</body>
</html>
添字(インデックス)と繰り返し文
  • キーとして添字も出力できる
<?php 
  $product[0] = '鉛筆';
  $product[1] = '消しゴム';
  $product[2] = '定規';
  $product[3] = 'コンパス';
  $product[4] = 'ボールペン';
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>foreach文で添字を出力する</title>
</head>
<body>
<table border="1" width="160">
<tr><th>番号</th><th>商品名</th></tr>
<?php
  foreach ( $product as $id => $value ) {
    echo '<tr><td>' . $id . '</td><td>' . $value . '</td></tr>' . "\n";
  }
?>
</table>
</body>
</html> 

ループを抜ける breakとcontinue

break

  • 繰り返し処理の中で、強制的に繰り返し処理を終了したり、強制的に次の繰り返し処理を行ったりすることができます
  • 繰り返し処理を強制的に終了する場合は、「break;」を使います
<?php
  $i = 1;  // for文の初期処理である$iの定義と代入

  // 変数$iが1から5になるまで繰り返し処理(初期処理の記述は、省略)
  for ( $i = 1; $i < 5; $i++ ) {
    echo $i . '<br>';  // $iの値(1、2、3)を出力。<br>で改行。
    if ( $i === 3  ){
      break;
    }
  }
  echo '$iが' . $i . 'になったので、処理終了!';

continue

  • 次の繰り返し処理に強制的に処理をとばす場合、「continue;」を使います
<?php
  for ( $i = 1; $i < 5; $i++ ) {  // 変数$iが1から5になるまで繰り返し処理
    if ( $i === 3 ) {  // もし、$iが3の場合
      // この先の出力処理をとばして、次の繰り返しへ
      continue;
    }
    echo $i . '<br>';   // $iの値(1、2、4)を出力。<br>で改行。
  }


《例》

<?php
// ループ(for/while)

// break; continue;

/*
for ($i = 0; $i < 10; $i++) {
    if ($i > 5) {
        break;
    }
    echo $i;
}
*/

for ($i = 0; $i < 10; $i++) {
    if ($i % 2 == 0) {
        continue;
    }
    echo $i;
}

繰り返し - foreach文

「foreach文」で繰り返し

  • foreach文は、配列の全要素に対してループ処理を行いたい場合に使います
  • 構文には「基本形」と「拡張形」があり、書式は以下になります

// 基本形構文
foreach( 配列 as 要素の値を格納する変数 ){
 繰り返したい処理
}


// 拡張形構文
foreach( 配列 as 要素の添字を格納する変数 => 要素の値を格納する変数 ){
 繰り返したい処理
}

プログラムで書くと、以下のとおりとなります。

<?php
  // $dataに値を格納
  $data = array ( 15, 20, 35, 45, 50 );
  
  // <基本形>全配列要素の値を表示
  foreach ( $data as $value ) {
    echo $value . '<br>';
  }


拡張形で、配列の添字も取得できることを確認してみます。

<?php
  // $dataに値を格納
  $data = array ( 15, 20, 35, 45, 50 );
  
  // <拡張形>全配列要素の値を表示
  foreach ( $data as $key => $value ) {
    echo $key . '=>' . $value . '<br>';
  }


連想配列でも同様に、使用できます。

<?php
  // 連想配列変数$presentの宣言と初期化
  $present = array ( '長崎'=>'チャンポン', '名古屋'=>'手羽先', '沖縄'=>'泡盛' );
  
  // 基本形で、全配列要素の値を表示
  foreach ( $present as $value ) {
    echo $value . '<br>';
  }
  
  echo '<br>';
  
  // 拡張形で、全配列要素の値を表示
  foreach ( $present as $key => $value ) {
    echo $key . 'は、' . $value . 'が有名です。<br>';
  }
foreach文の使い方
  • 配列から要素を1つずつ取り出し、最後まで到達すると自動でループを終了する
  • 次の要素がある間は処理が続く

foreach (配列 as 仮変数) {
 …繰り返し実行する処理…
}

  • この場合、配列$dataの内容を変数$d にセットしながら、処理を繰り返しています
  • 要素を一時的に保存するための要素(この場合 $d)のことを仮変数と呼びます
  • 配列内容を順番に処理するような場合、for命令よりもforeach命令を使った方がコードがシンプルになります

foreach文の書き方(1)

  • 「$ar as $v」は、配列$arの要素を$vに1つずつ取り出すの意味
  • 先頭の要素、2番目の要素、3番目の要素と順番に処理されていきます
<?php
 $ar = array('東京', '千葉', '神奈川');

foreach ($ar as $v) {
	echo $v.'<br>';
}
?>

foreach文の書き方(2)

  • インデックスと値を関連付けた連想配列を処理する場合は、インデックスと値を別々に扱うことができます
  • インデックスと値は「=>」でつなぐ必要があります
  • 「$ar as $k => $v」と記述すると、配列$arのインデックスが$kに、値が$vに格納されます
<?php
  $ar = array('tky' => '東京', 'chb' => '千葉', 'kng' => '神奈川');

  foreach ($ar as $k => $v) {
    echo 'インデックス:' . $k . '名前:' . $v . '<br>';
  }


《実例》

<?php
$data = array ( '山田太郎', '横山花子', '田中一郎', '山本久美子', '鈴木次郎', '星山裕子', '佐藤勝男' );
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>名簿出力</title>
</head>
<body>
名簿には<?php echo ( count($data) ); ?>人が登録されています。
<ol>
<?php
foreach ( $data as $d ) {
  echo '<li>'.$d.'</li>' . "\n";
}
?>
</ol>
</body>
</html>

繰り返し構文の使い分け

  • ひとつの基準として、 foreach > for > while の順番に利用する
  • foreachが最も利用局面が限定された命令で、whileが最も汎用的な、その分処理によってはコードが冗長になりやすい

命令 使いどころ
while 繰り返しによって条件式の TRUE / FALSE が変化する場合
for 繰り返しの回数を具体的に指定できる場合
foreach 配列の内容を順番に処理したい場合