php array ( 配列 ) を使ってみよう
» STARTOUT詳細はこちら

WEBサービスづくり学習「STARTOUT」はじめました!

自分の「WEBサービス」を作りながら「制作技術」を習得しよう!

STARTOUTとは、WEB制作×サービス作りのオンライン実践学習サービスです。ゼロからWEBサービスを作り、収益化しながら技術を習得してみましょう!

 詳しくはこちら
ここでは「WEB制作×事業づくり実践学習サービス STARTOUT」の学習コンテンツの一部を公開しています。もし1,000以上あるすべてのコンテンツを学び尽くしたい場合、ぜひこちらからご登録ください!

array ( 配列 ) を使ってみよう

php|2018年11月10日

2018年11月10日
  • このエントリーをはてなブックマークに追加

今回は、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の中にある配列を一覧ですべて出力することができます。

少し、概念の把握が難しい配列ですが、なんとなく理解できたでしょうか?
ご自身でも数字を変えたり、データを増やしたりして試してみてくださいね。

次回は関数について進めていきます。

WEBサービスづくり学習「STARTOUT」はじめました!

自分の「WEBサービス」を作りながら「制作技術」を習得しよう!

STARTOUTとは、WEB制作×サービス作りのオンライン実践学習サービスです。ゼロからWEBサービスを作り、収益化しながら技術を習得してみましょう!

 詳細はこちら
  • このエントリーをはてなブックマークに追加

ウエヤマ ショウタ

BASE.91とWORKROOM@セブ立ちあげました。誰もが「独学」でプロになれる仕組みを作る。現役WEBデザイナーでエンジニア。起業好き。IT留学事業を売却後、シリコンバレーで起業を学び、起業家&クリエイター育成活動開始。経験をシェアしてます。独学で収益化したスキル : デザイン、プログラミング、起業、マーケ、英語

ウエヤマ ショウタ

BASE.91とWORKROOM@セブ立ちあげました。誰もが「独学」でプロになれる仕組みを作る。現役WEBデザイナーでエンジニア。起業好き。IT留学事業を売却後、シリコンバレーで起業を学び、起業家&クリエイター育成活動開始。経験をシェアしてます。独学で収益化したスキル : デザイン、プログラミング、起業、マーケ、英語

WEBサービスづくり学習「STARTOUT」はじめました!

自分の「WEBサービス」を作りながら「制作技術」を習得しよう!

STARTOUTとは、WEB制作×サービス作りのオンライン実践学習サービスです。ゼロからWEBサービスを作り、収益化しながら技術を習得してみましょう!

 詳しくはこちら