Language
日本語
English

Caution

JavaScript is disabled in your browser.
This site uses JavaScript for features such as search.
For the best experience, please enable JavaScript before browsing this site.

  1. Home
  2. PHPBeginner - Precautions When Using Arrays

Precautions When Using Arrays - Japanese Only

みなさまどうもおはこんばんにちわ。

前回の記事では基本的な配列の記述方法などを解説しました。続きまして配列のちょっとトリッキーな代入方法とか注意点とか見て行きましょう。

まず新しい値を配列の最後に追加する方法を紹介します。以下のサンプルをみてください。

<?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での配列の記法とか配列の使用における注意はこんな感じになっています。大丈夫そうでしょうか。

さて、これまで見てきたサンプルでは配列を使用する利便性があんまりわからなかったと思います。なので、続いての記事では配列の具体的な使用例とかみていきましょう。

ではではこの辺で。またお会いしましょう。

This article was written by Sakurama.

Author's beloved small mammal

桜舞 春人 Sakurama Haruto

A Tokyo-based programmer who has been creating various content since the ISDN era, with a bit of concern about his hair. A true long sleeper who generally feels unwell without at least 10 hours of sleep. His dream is to live a life where he can sleep as much as he wants. Loves games, sports, and music. Please share some hair with him.

If you find any errors or copyright issues, please .