【PHP】プログラミング勉強ノート(配列,連想配列)



先日発見した、私がプログラム業界へ入った時のノートを元にした
プログラミング勉強ノートの続きです。

PHPプログラミングの基礎はコチラから↓
【PHP】プログラミング勉強ノート(基礎から条件分岐まで)


引き続き、私がプログラムの業界へ入った時のノートを清書しながら
初心に戻ったつもりでPHPの基本的な事を解説して行きます。

今回解説するのは、『配列』です。

  1. 複数の値を纏めて管理する配列
  2. インデックスに特定の名前を付ける連想配列


複数の値を纏めて管理する配列



実際のプログラムの中では、沢山の値を使用します。
その値毎に変数を作成していては、変数名を考えるのも大変ですし、
変数が増えすぎて管理するのが大変になります。

纏められるのであれば、なるべく整理して纏めたいものです。

そこで、今回使用するのが『配列』というデータ構造です。

配列とは、一つの変数の中に、階層構造を持った複数の値を持たせる事が出来ます。


配列へ値を追加するのは、簡単で、変数の後に『[]』とつけましょう。
後はそこへ代入します。


$arr[] = "値";


これだけですと、ただの変数と変わらないので、
下記の様に、一つの変数に複数の値を代入してみます

$arr[] = "値1";
$arr[] = "値2";


これで、$arrの中には二つの値が格納されました。
取り出し方は、逆に括弧の中に数値を入れて取り出します。


echo $arr[0];
echo $arr[1];


プログラムの世界では、数値は『0』から数え始めます。
ですので、上記の例ですと、$arrの配列の0番目の値と、1番目の値を出力しています。

$arr[]へ代入した順番に、自動的にインデックスと呼ばれる
数値が0から自動的に采番されます。


では、一つの変数へ沢山の値を持たせたい場合はどうでしょう?
上記の様に書き続ければ可能ですが、
少し面倒です。

ここで登場するのが『array()』という関数です。
この関数は配列を定義する関数で、
定義した配列を纏めて変数へ代入する事が出来ます。


$arr[] = array(
 "カンマ区切りで",
 "値を複数",
 "纏めて",
 "配列として",
 "変数へ",
 "代入できます。"
);



これで、$arrという変数へ配列を代入する事が出来ました。
注意する点が、代入する$arrは、$arr[]では無いという事です。


これを、


$arr[] = array(
 "カンマ区切りで",
 "値を複数",
 "纏めて",
 "配列として",
 "変数へ",
 "代入できます。"
);


の様にしてしまうと『$arrの0番目に配列が入っている』
と言う状態に成ってしまいます。

これを、多次元配列と呼びます。

実際のプログラム構築となると、
配列の中に配列を持たせるような多次元的データ構造を
使用する事が多いと思います。

ですが、配列という考え方に慣れるまでは、
なるべく配列の階層が浅いようにプログラミングするのが賢明です。


察しの良い方は既に想像出来ているかも知れませんが、
array()関数で一気に配列を定義する際に、配列の値に更にarray()にて定義する事も可能です。



$arr = array(
 array( "hoge", "moge", "toge" ),
 array( "ore", "more", "sore" ),
 array( "nari", "huri", "mori" )
);


各値へのアクセスの仕方は、例えば『more』という値を取得するには、配列の二番目の中の二番目となりますので、

echo $arr[1][1];
echo "moreが出力される";

の様にアクセスします。勿論、更に配列の階層が深くなると、$arr[1][1][0][2]の様に、インデックスをカッコで指定する記述が伸びて行きます。






インデックスに特定の名前を付ける連想配列



インデックス番号が常に数字だと、何のデータが入っているのかわからず、
可読性も悪いうえ、対応表を別に用意しないと、とてもじゃないけと扱い切れません。
特に、配列の階層が深くなると、数字だけではとても解りにくいです。
このインデックスに、数字では無く特定の名前の文字列が指定出来たらとても便利でわかり易いのではないでしょうか。

これを、『連想配列』と呼び、インデックス番号の変わりに付けられる名前を『添え字』と呼びます。


では名前の付け方です。


$arr = array(
 "name" => "hamada" ,
 "sex" => "man",
 "country" => "japan"
);


上記の様に、今までは値を記述していた個所に二つの文字列。その文字列の間に『=>』という矢印の様な記述を行ないます。
『=>』の左側が値の名前になります『添え字』にあたり、『=>』の右側が今まで通りの値となります。


それではアクセスの仕方を見てましょう。


echo "hamadaと出力されます";
echo $arr["name"];

echo "manと出力されます";
echo $arr["sex"];

echo "japanと出力されます";
echo $arr["country"];


インデックス番号を記述していた個所に、文字列で添え字を記述します。
そうする事で、該当する添え字に対する値を取得出来ます。
番号だった頃と比べて、とても解りやすくなったと思いませんか?


多次元配列だったとしても、とても解りやすくなります。
下記に例を示します。





$arr = array(
 "address" => array( "country" => "japan", "city" => "tokyo" ),
 "name" => array( "first" => "yuu", "family" => "hamada" )
)

echo "japanと出力されます";
echo $arr["address"]["country"];

echo "tokyoと出力されます";
echo $arr["address"]["city"];

echo "yuuと出力されます";
echo $arr["name"]["first"];

echo "hamadaと出力されます";
echo $arr["name"]["family"];



とても解りやすくなりましたね。
一時的な配列や、ただの一覧の様な使い方以外では、
なるべく連想配列を使用した方が、可読性の良いわかり易いプログラムが記述出来るでしょう。





続いて、PHPにおける繰り返し制御構文として、for(),while(),foreach()と、
それらの制御構文をサポートするbreak,continueについて、
プログラミング勉強ノートを元に解説します。
【PHP】プログラミング勉強ノート(繰り返し処理)





コメントをお待ちしています

人気の投稿

Category

Algorithm (2) Android (8) ASP/aspx (1) Blogger (2) C/C++ (1) Chrome (5) CSS (9) Firefox (4) Fortran (1) Google (9) GoogleMap (2) HTML (12) IE (3) Information (4) iOS (2) iPhone/iPad/iPod (2) Java (6) JavaScript (16) jQuery (9) JSP (1) LifeRecipe (5) Linux (2) Macintosh (2) MapKit (4) Marketing (7) MySQL (3) NAMAZU (2) Objective-C (7) Other (7) Perl (1) PHP (9) Python (1) RSS/Atom (2) Ruby (1) Safari (2) SEO (11) Smarty (2) SQL (2) Tex (1) Three.js (1) Twitter (1) TwitterLog (313) UIKit (5) Unix (1) VBA/VBS (1) Windows (5) WordPress (3) Writing (5) XAMPP (1) XML (1) Yahoo (2) ZendFramework2 (14)

Archives