配列

配列(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>