読者です 読者をやめる 読者になる 読者になる

ハロトレWebデザインの勉強 | 求職者支援訓練Webサイト制作科 フェリカテクニカルアカデミー

未経験者からプロになるハロートレーニングWebデザインの勉強

データをまとめる配列と連想配列

一連のデータをまとめて扱う

  • たくさんのデータをグループ化して保存するときに使うのが「配列(array)」と「連想配列」です

配列(array)

  • 配列とは、「複数の値を格納できる変数」
  • array関数
  • arrayの中に格納されているものを「要素(element)」と呼びます
  • 要素は、先頭から「0, 1, 2, …」と番号が付けられており、その番号のことを「添字(そえじ)」や「インデックス(index)」と呼びます
<?php
$a = array ( 'リンゴ', 'バナナ', 'ミカン', 'ジャガイモ', 'トマト' );
for ( $i = 0; $i < count($a); $i++ ) {
  echo $a[$i] . '<br>';
}


配列をループ処理する
  • count関数
  • 「count($a)」は 5 ですが、$i は「0から4」まで変化しながらループします
  • 出力の記述は、改行を含めてわかりやすく表示させます
echo $a[$i] . '<br>';

連想配列

  • 添字の代わりに、任意の文字列を「キー(key)」として値を保存する方法
<?php
$h = array (
  'apple' => 'リンゴ',
  'banana' => 'バナナ',
  'orange' => 'みかん',
  'peach' => 'もも',
  'melon' => 'メロン'
);
  • PHPでは、「キー => 値」のように表記します
キーから値を取得する

《input.php

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>キーから値を取得</title>
</head>
<body>
<form action="output.php" method="post">
<p>英語で果物名を入力してください:<input type="text" name="english"></p>
<p><input type="submit" value="英語を日本語に変換"></p>
</form>
</body>
</html>


《output.php

<?php
$h = array (
  'apple' => 'リンゴ',
  'banana' => 'バナナ',
  'orange' => 'みかん',
  'peach' => 'もも',
  'melon' => 'メロン'
);
$key = $_POST[ 'english' ];
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>キーから値を取得</title>
</head>
<body>
<h1>
<?php
if (array_key_exists($key, $h)) {
  echo '英語' . $key . 'は、日本語で' . $h[$key]. 'です。';
} else {
  echo $key . 'は、登録されていません。';
}
?>
</h1>
</body>
</html>


連想配列の定義

  • ユーザーがname属性「english」フィールドに入力された値を、$keyという変数に代入します
$key = $_POST[ 'english' ];
if (array_key_exists($key, $h)) {
  //キーが存在するときに実行されるプログラム
}

連想配列の要素をひとつずつ取り出す

  • 配列内の全データを取得するには、forループを使いますが、連想配列の場合はキーが連続した数字ではないので、forループで取り出すことができません
キー一覧から参照する
  • まずキーの配列を取得して、それをループ処理する方法
  • array_keys関数
<?php
$h = array (
  'apple' => 'リンゴ',
  'banana' => 'バナナ',
  'orange' => 'みかん',
  'peach' => 'もも',
  'melon' => 'メロン'
);

$keylist = array_keys($h);
for ($i = 0; $i < count($keylist); $i++) {
  echo $h[$keylist[$i]] . '<br>';
}
  • $keylistには、「apple」「banana」…という$hのキーの配列が格納されます
  • これを変数$iでループ処理すれば、ループのたびにそのキーが$keylist[$i]として取得できます
  • それを$hのキーとして指定すれば値を取り出せます
foreach構文を使う
  • foreach
  • foreach が使えるのは配列とオブジェクトだけであり、 別のデータ型や初期化前の変数に対して使うとエラーになります
<?php
$h = array (
  'apple' => 'リンゴ',
  'banana' => 'バナナ',
  'orange' => 'みかん',
  'peach' => 'もも',
  'melon' => 'メロン'
);
$keylist = array_keys($h);
foreach ($h as $key => $value) {
  echo $value . '<br>';
}
  • $keyには「キー」、$valueには「値」がそれぞれのループのたびに格納されます
  • このforeach文のようにループ処理で、「キーと値」をひとつずつ取り出すことを「列挙」とか「Enumrate」と呼びます
  • 単純に全部を列挙する場合は、array_keys関数でキーを取得するよりも、foreach文で取得するほうが消費するメモリー量が少なくてすみます