忍者ブログ
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。



2017/03/29 20:12 |
PHP1-6:連想配列と多次元配列
配列でユーザの情報を管理するとしましょう。

#'0'=>'苗字','1'=>'名前','2'=>'ユーザID',
   '3'=>'パスワード','4'=>'郵便番号','5'=>'住所',
   '6'=>'メールアドレス','7'=>'ホームページ','8'=>'性別'
$yamada=array('0'=>'山田','1'=>'太郎','2'=>'yamadax',
   '3'=>'pass','4'=>'111-1111','5'=>'',
   '6'=>'a@a.jp','7'=>'','8'=>'男');


ユーザIDを取得したいときは、
$yamada[2]
で取得できます。

さて、スクリプトの作成時はまだいいのですが、
時間をおいて見直すと、各数字が何を表しているのか間違いなくわからなくなります。
コメントに書いてはあるので代入時はともかく、
プログラムのずっと下のほうで$yamada[7]を使用していたとき、
$yamada[7]って何だっけ、などとなってしまうともう大変です。

そんなときのために連想配列というものが用意されています。
簡単に言うと数値のかわりに文字を使える配列です。
とりあえず書き換えてみましょう。

$yamada=array('firse_name'=>'山田',
   'last_name'=>'太郎','user_id'=>'yamadax',
   'user_pass'=>'pass','zip_code'=>'111-1111',
   'address'=>'','mail_address'=>'a@a.jp',
   'homepage_address'=>'','sex'=>'男');


ユーザIDを取得したいときは、
$yamada['user_id']
で取得できます。

これならプログラムのずっと下のほうに$yamada['homepage_address']があった場合、
$yamada['homepage_address']が何を表しているのか容易にわかるでしょう。

はて。
元々配列ってのが個別に変数名をつけると大変だから数値にしたというのに、
その数値をまた文字に直してどうするんだろう?
と思うかもしれません。

幸いなことにPHPでは連想配列をひと塊の変数と考えることができ、
その各要素に、あるいは全体にアクセスできる方法が揃っています。
例えばforeach文は、for文のように連想配列の各要素に対して処理を繰り返します。

foreach($yamada as $xxxxx => $yyyyy){
   print('連想配列名:'.$xxxxx.' その値'.$yyyyy.'<br>');
}


で全要素の名前とその値を表示、等ということを行うことが出来ます。
他にもarray_pushやarray_filter等の有用な関数が揃っているので、
いろいろ使ってみましょう。

中にはarray_product等の、いったい誰がこんなの使うんだ的な関数もありますが。


さて、山田さん以外に鈴木さんの情報を管理したいとしましょう。
$suzuki
を作るとなるとまた変数が増えます。
同姓同名の山田さんが増えたりするともう大変です。

そんなときのために多次元配列が使用可能となっています。
一見入り組んでて複雑に見えますが、やってることは今までの配列と同じです。
以下のように書くことが出来ます。
上は1行で書いてあり、下は2行で書いてありますが、中身は同じです。

$user_info=array(
    array(
        'firse_name'=>'山田','last_name'=>'太郎',
        'mail_address'=>'a@a.jp'),
    array(
        'firse_name'=>'鈴木','last_name'=>'次郎',
        'mail_address'=>'')
);

$user_info[]=array(
        'firse_name'=>'山田','last_name'=>'太郎',
        'mail_address'=>'a@a.jp');
$user_info[]=array(
        'firse_name'=>'鈴木','last_name'=>'次郎',
        'mail_address'=>'');


$user_info[0]['first_name']で「山田」が取得でき、
$user_info[1]['last_name']で「次郎」が取得できます。

この書き方なら、いくら人数が増えても1次元目の数値を増やすだけで簡単に対応できます。
たとえば、全員に対してメアドがきちんと書かれているか空白のチェックを行いたい場合、

foreach($user_info as $xxxxx){
    if(!$xxxxx['mail_address']){
        print($xxxxx['firse_name'].'のメアドが空白');
    }
}


というような書き方が出来ます。
たった数件ならどのような書き方をしても大してかわりませんが、
後々のことを考えると、できるだけループで処理できるコードを書くほうがよいでしょう。

多次元配列は便利ですが、使いすぎると逆にわかりにくくなる上にメモリを大量に使用するので、
せいぜい3次元程度にとどめておきましょう。

PR


2008/04/23 13:44 | Comments(0) | TrackBack(0) | PHP

トラックバック

トラックバックURL:

コメント

コメントを投稿する






Vodafone絵文字 i-mode絵文字 Ezweb絵文字 (絵文字)



<<JavaScript2-1:XMLHttpRequest | HOME | PHP1-5:配列>>
忍者ブログ[PR]