Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
PHP
入門編
- トップページ
- PHP入門編 - 配列使用時の注意点
配列使用時の注意点
みなさまどうもおはこんばんにちわ。
前回の記事では基本的な配列の記述方法などを解説しました。続きまして配列のちょっとトリッキーな代入方法とか注意点とか見て行きましょう。
まず新しい値を配列の最後に追加する方法を紹介します。以下のサンプルをみてください。
<?php $arr = array('miku', 'IA');
上記のサンプルは配列『arr』に文字列『miku』と文字列『IA』が代入されている感じですね。それに新しい値を追加したい場合は以下のように記述します。
<?php $arr = array('miku', 'IA'); $arr[] = 'rin';
配列『arr』の横にちょこんと『[]』が書いてあって、そこに文字列『rin』が代入されてますね。これで配列『arr』に文字列『rin』が追加されたことになります。ちょっと『var_dump()』で確認してみましょう。
<?php $arr = array('miku', 'IA'); $arr[] = 'rin'; var_dump($arr);
これを実行させると以下となります。
array(3) { [0]=> string(4) "miku" [1]=> string(2) "IA" [2]=> string(3) "rin" }
バッチリ追加されていますね。こんな感じでPHPで配列に値を追加したい場合は『[]』を使って値を代入すればOKです。注意点として『[]』の中に数値を入れてしまった場合はそのインデックスの要素への代入処理になりますので間違えないようにしましょう。
PHPでの配列の最後に追加する別の方法として『array_push()』を使用する方法があります。記述方法は以下のような感じですね。
array_push(配列名, 追加したい値);
<?php $arr = array('miku', 'IA'); array_push($arr, 'rin', 'ren'); // 配列『arr』に文字列『rin』と文字列『ren』が追加されます。
こちらでも問題なく配列に値を追加できるのですが、『array_push()』は複数の値を一気に追加する場合のみ使用されるのが一般的で、ひとつの値を追加する場合には『[]』を使ったほうが記述が短く済むのでオススメです。
さて、PHPでの配列定義の注意点を少し上げていきます。通常、配列は連番で入れていくものなのでプログラム言語によっては番号を飛ばしたりできなかったりするのですが、PHPでの配列では番号をかっ飛ばして要素を生成出来る感じになっています。
ちょっと試してみましょう。適当に配列を生成して、そこに『3』番目の要素をいきなり代入してみます。練習がてら『[]』で配列定義してみますね。
<?php $arr = []; // 配列『arr』を生成。 $arr[3] = 'miku'; // 『3』番目の要素にいきなり代入してみます。 var_dump($arr);
これを実行させると以下となります。
array(1) { [3]=> string(4) "miku" }
こんな感じで何の問題もなく生成できてしまってます。なのでPHPでの配列は必ず連番で要素が収まっているとは限らない、ということだけは忘れないようにしてください。特に他言語に精通している方だと思わぬところでハマってしまうかもしれません。
あとインデックス番号をかっ飛ばして生成した配列に『[]』を使って代入すると、最後のインデックス番号の次の番号を使用して要素を追加する、といった挙動になります。ちょっと試してみますね。以下のサンプルをみてください。
<?php $arr = []; // 配列『arr』を生成。 $arr[3] = 'miku'; // 『3』番目の要素にいきなり代入してみます。 $arr[] = 'IA'; // 『[]』を使って要素を追加します。 var_dump($arr);
これを実行させるとこうなります。
array(2) { [3]=> string(4) "miku" [4]=> string(2) "IA" }
上記のサンプルの配列『arr』の最大インデックス番号は『3』なので次の『4』に文字列『IA』が追加されていますね。この挙動も注意するようにしてください。
そして、前の記事で連想配列と配列の扱いに差がない、という話をしました。連想配列は配列のインデックスが文字列に変わったようなものなんですが、扱いに差がないので同じ『array()』で連想配列も定義することができます。そんでもってインデックス番号に文字列の数値を入れてしまってもちゃんとした数値として扱われてしまう、というちょっと変な感じになっています。
ちょっと確認してみましょう。以下のソースコードをみてください。
<?php $arr = ['miku']; // 配列『arr』を生成しつつ『0』番目の要素に文字列『miku』を代入します。 $arr['0'] = 'IA'; // 配列『arr』の文字列『0』番目の要素に文字列『IA』を代入します。 echo $arr[0]; // 配列『arr』の『0』番目の要素を出力します。
さて、こちらを実行させるとミクちゃんとIAちゃん、どっちが出力されるのでしょうか。正解はこちらです。
IA
IAちゃんですね。見事に上書きされてしまっています。こんな感じでPHPでは文字列の数値と数値型の数値が同じものとして扱われてしまうので要注意です。
PHPでは変数を定義し、何も値を入れない状態だと『null』が入っているものとして処理されます。『null』は「ヌル」って読みます。英語の発音では『ナル」が近いのですが、日本だと「ヌル」と呼ばれるのが一般的です。『null』は日本語で書くと『無』って意味になります。『true』や『false』と同じようにPHP側で用意されている根本的な値のひとつです。詳しくは先の記事で解説しますね。
<?php $test; // 変数『test』を生成。 var_dump($test); // 『NULL』と出力
『null』は大文字小文字が区別されないため、『NULL』、『NuLl』なんて書いてもOKです。まあわかりづらいので記述するときは『NULL』、もしくは『null』にしておきましょう。
ちなみに『null』っていう値が用意されている、ということなので代入なんかさせるときはそのまま『null』を代入してしまってOKです。以下のような感じですね。
<?php $test = null; // 変数『test』に『null』を代入します。 var_dump($test); // 『NULL』と出力されます。
さて、ちょっと注意点です。先ほど解説したとおり、存在しない変数とか存在しない配列の要素とかを出力とかすると『NULL』となるわけですが、それと同時に『Notice』(通知)が出てきます。以下はPHPでエラー出力を『On』にした状態での実行結果です。
<?php var_dump($test); // 存在しない変数を出力させてみます。
Notice: Undefined variable: test in /Users/username/Desktop/test/index.php on line 2 NULL
これはあくまでも「ちょっと変な記述してますよー」程度の話なのでPHPでエラー出力を『Off』にしてシカトしようと思えばシカトできます。
しかし、一応PHP側から注意されているのでシカトしたまま構築するのもちょっと微妙です。
なので変数や配列の要素が存在しているかしていないかを判定したいときは『isset()』を使用するようにすると良いでしょう。記述例は以下のような感じですね。『isset()』の中に判定したい変数や配列の要素をいれてあげればOKです。定義されており、尚且つ『NULL』じゃなければ『true』、それ以外ならば『false』が返って来ます。
<?php $test; $test1 = 'miku'; $arr = []; var_dump(isset($test)); // 変数『test』は定義されていますが、何も代入していないため『NULL』です。なので『false』となります。 var_dump(isset($test1)); // 変数『test』は定義され、文字列『miku』が代入されているため『true』となります。 var_dump(isset($arr[0])); // 配列『arr』の0番目の要素は存在しないため『false』となります。 var_dump(isset($arr1)); // 変数『arr1』は存在しないため『false』となります。
『isset()』はよく使用される処理なので覚えておきましょう。
というわけでPHPでの配列の記法とか配列の使用における注意はこんな感じになっています。大丈夫そうでしょうか。
さて、これまで見てきたサンプルでは配列を使用する利便性があんまりわからなかったと思います。なので、続いての記事では配列の具体的な使用例とかみていきましょう。
ではではこの辺で。またお会いしましょう。
この記事は桜舞が執筆致しました。
著者が愛する小型哺乳類 |
桜舞 春人 Sakurama HarutoISDN時代から様々なコンテンツを制作しているちょっと髪の毛が心配な東京在住のプログラマー。生粋のロングスリーパーで、10時間以上睡眠を取らないと基本的に体調が悪い。好きなだけ寝れる生活を送るのが夢。ゲームとスポーツと音楽が大好き。誰か髪の毛を分けて下さい。 |
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。