今回は、array ( 配列 ) についてご説明していきます。
同時に、for文の応用も使ってみましょう。
arrayとは、変数のようにデータを入れておく箱のようなものです。
しかし、変数が箱だとしたら、array(配列)は引き出しのある棚のようなものです。
1つのデータだけではなく、複数のデータを入れることができます。
例えば引き出しがある箱は、いくつも物を入れられますよね。
引き出しの無い箱は1箇所にしか物を入れられません。
array(配列)も同じで、引き出しのある箱をイメージしてください。
プログラミングをする上で、少し概念の把握が難しいかもしれません。
ただ、どんな言語にも出てくる基本の文法ですので、しっかり抑えておきましょう。
ミッションの内容
今回のミッションは、配列に入れたユーザーデータをfor文で一覧出力します。
WEBサービスで類似の処理はよく使われますので覚えておきましょう。
今回は、普通の配列と、多次元配列と言われる2つの配列を試します。
普通の配列は、先程お伝えした通り、引き出しのある箱です。
1つの箱に複数のデータを整理して入れることができます。
今回、普通の配列は複数の果物の名前を1つの配列にまとめてみました。
多次元配列は引き出しの中をさらに、小箱で区切ったものを考えてください。
引き出し1つにさらに分割してデータを入れることができます。
例えば、ユーザー一覧の表を作ったとします。
それぞれのユーザーには「名前」「スキル」「年齢」のデータを入れたい。
こういう場合、どのような配列を作れば良いでしょうか。
ここで、多次元配列の登場です。
「ユーザー」という箱には「Aさん」「Bさん」という引き出しがあります。
Aさんの引き出しをさらに「名前」「スキル」「年齢」という小箱に分けます。
Bさんの引き出しにはBさんの「名前」「スキル」「年齢」の小箱に分けます。
このように各引き出しをさらに細分化するようなものです。
普通の配列は1階層だけデータを持っています。
多次元配列は2階層に分かれてデータを持っています。
HTMLの入れ子構造に近いですね。
ではfor文とarray(配列)で下記を再現するにはどうしたら良いでしょうか。
まず、ソースコードの解説を読み、自分自信で実装してみてください。
どうしても分からない場合は回答ファイルを参考にしましょう。
ソースコードの説明を下記に記載します。
まず一通り目を通して、同時に自分のエディタで試してみてください。
ソースコードの解説
まずは、全体のソースコードをみてみましょう。
最初に通常の配列を見ていきましょう。
<?php
//$array_fruitsを配列にします。
$array_fruits = array("バナナ", "りんご", "みかん");
//for文で出力します。
//0、1、2と3回繰り返します。
for($a = 0;$a<=2;$a++){
echo $array_fruits[$a];
//$array_fruits[0]というように[]の中の数字で何番目のデータを出力するかを決めます。
//配列の最初の値は0で呼び出せます。1からではありません。
//$array_fruits[$a]とすることで、連番で数字が入ります。
};
?>
$array_fruitsという配列に、カンマ区切りで果物の名前を3つ入れました。
配列の名前は自由につけられます。
$array_foodでも$food_arrayでも何でもOKです。
配列と変数の指定方法に大きな違いはありません。
変数の場合は、
$array_fruits = "りんご";
というように1対1でデータを入れました。
配列の場合は、
$array_fruits = array("バナナ", "りんご", "みかん");
というように、array()にカンマ区切りでデータを入れます。
取り出す時は、
echo $array_fruits[0];
というように、[]の中に取り出すデータの番号を入れることで出力できます。
一番左のデータが0でそこから連番で1、2で取り出せます。
みかんを取り出したければ
echo $array_fruits[2];
で取り出せるということです。
自動で順番に取り出したい場合は、for文で出力すれば可能です。
[]内のループをforの変数に変えればOKです。
多次元配列は?
次が多次元配列と言って、2階層でデータを格納しています。
「名前」「スキル」「年齢」が2人分、配列に格納されている形です。
<?php
//今回は例として、2人のプロフィールが入った配列を用意します。
//$array_profileを配列にします。
$array_profile = [
//まず第一階層に「datatype」「1」「2」の3つの入れ物を用意します。
//datatypeにはuserdataという文字列を入れました。
"datatype" => "userdata",
//1は、今回の場合、1人目のデータという意味で使っています。
//1の中には名前(name)、スキル(skill),年齢(age)の3つのデータを入れます。
"1" => array(
"name" => "山田",
"skill" => "デザイン",
"age" => "24"
),
//2は、今回の場合、2人目のデータという意味で使っています。
//2の中にも名前(name)、スキル(skill),年齢(age)の3つのデータを入れます。
"2" => array(
"name" => "ささき",
"skill" => "プログラミング",
"age" => "28"
)
];
//いくつのデータが入っているか、カウントしています。
$array_count = count($array_profile);
?>
<ul>
<?php
//データの回数分、カウントします。
//配列のカウントは0から始まります。
//それに対して、1からスタートすることで最初の1つのデータ(datatype)をスキップします。
//こうすると「1」と「2」のプロフィールだけ表示されます。
for($i = 1; $i < $array_count; $i++){
echo "<li>";
echo "■ユーザーデータ".$i;
echo "<br>";
//$array_profile[何番目のデータか][n番目のどのデータを取得するか];
//これで、配列のデータが取得できます。
echo "名前 :".$username = $array_profile[$i]["name"];
echo "<br>";
echo "スキル :".$userskill = $array_profile[$i]["skill"];
echo "<br>";
echo "年齢 :".$userage = $array_profile[$i]["age"];
echo "</li>";
};
?>
</ul>
配列$array_profileの中に格納されたデータをfor文で出力しています。
こちらは複雑ですので、1つ1つ、見ていきましょう。
$array_profile = [
"datatype" => "userdata",
];
まずarray(配列)にデータを格納していきます。
今回の場合、1段目の引き出しに「datatype」と名付け、その中に「userdata」という文字データを入れてみました。
何のデータを入れておく配列か「明示するため」に入れたものです。
データのタイトルみたいなもので、特別な意味があるわけではありません。
出力さえしないデータです。
<?php
$array_profile = [
"datatype" => "userdata",
"1" => array(
"name" => "山田",
"skill" => "デザイン",
"age" => "24"
),
"2" => array(
"name" => "ささき",
"skill" => "プログラミング",
"age" => "28"
)
];
?>
次に「1」「2」と連番で引き出しに名前をつけます。
さらに引き出しの中に複数の「小箱」を置きました。
それぞれ、name、skill、ageと名付けています。
「引き出しの中に小箱を置く」と表現しましたが、イメージは一緒です。
データの中にさらに小分けでデータを入れられるようになります。
なお、小箱の中には、ユーザーのデータを入れました。
これで、データの格納は完了です。
人数が増えれば増えるほど、数字と共に増やしていけば良いだけです。
そして、さらにもう1つ。
<?php
$array_count = count($array_profile);
?>
$array_profileの中にあるデータの数をカウントしています。
今回、datatypeを含めて3つデータが入っていますので3とカウントされます。
カウントされるのは「引き出しの数」であって「小箱」はカウントされません。
ここでカウントしたデータがどこで使われるのかは、次に出てきます。
<ul>
<?php
for($i = 1; $i < $array_count; $i++){
echo "<li>";
echo "■ユーザーデータ".$i;
echo "<br>";
echo "名前 :".$username = $array_profile[$i]["name"];
echo "<br>";
echo "スキル :".$userskill = $array_profile[$i]["skill"];
echo "<br>";
echo "年齢 :".$userage = $array_profile[$i]["age"];
echo "</li>";
};
?>
</ul>
for文は前回やったので、詳しい内容は、はぶきます。
まず、注目してほしいのは、$array_countがfor文の条件に入っていること。
先程データの数をカウントした変数ですね。
これで$array_countの数になるまで処理を繰り返すことができます。
3以下の時にforが繰り返されるので、$iが2になるまで繰り替えされます。
そして、arrayの出力方法。
$username = $array_profile[$i][“name”] というように、arrayの数字で示した部分を変数$iにしています。
これで自動的に処理が繰り返される度、1番目の配列、2番目の配列、というように出力できるようになりました。
あとは、n番目の配列にある小箱、nameやskillをつなげて書けばよいだけです。
これで、arrayの中にある配列を一覧ですべて出力することができます。
少し、概念の把握が難しい配列ですが、なんとなく理解できたでしょうか?
ご自身でも数字を変えたり、データを増やしたりして試してみてくださいね。
次回は関数について進めていきます。