プロぽこ

【PHP入門】配列の基本操作とチェック関数について解説!

PHPは組み込みの関数がとても充実している言語です。特に配列を操作する関数が豊富に揃っているため、大抵これらの関数の組み合わせでなんとかなってしまいます。

この記事ではPHPの配列操作の関数について、簡単な例を出しながら紹介していきます。

他言語でもよくあるものもありますが、PHPを知らない方は思わず間違った使い方をしてしまう可能性があるので、ぜひこの記事を読んで参考にしていただければと思います。

1. PHPの配列の基本

はじめに配列の基本を紹介します。

1.1 配列の作成

PHPで配列を使う場合、下記の2つの方法で作成することができます。


$array = array();
$array = [];

作成時にあらかじめ値を持った上で初期化することもできます


$array = array(1,2,3,4);

1.2 配列の種類

配列は大きく2つに分類することができます。「添字配列」と「連想配列」です。列の各値をkey, valueの関係で見たときに
keyが数字の連番になっているものが添字配列、そうなっていないものが連想配列です。


// 添字配列
// [0 => 1, 1 => 2, 2 => 3]
$array = [0 => 1, 1 => 2, 2 => 3];

// こちらも同じ
// [0 => 1, 1 => 2, 2 => 3]
$array = [1, 2, 3];

// 連想配列
// 'key1' => 'value1', 'key2' => 'value2', 'key3' => 'value3'
$array = [ 'key1' => 'value1', 'key2' => 'value2', 'key3' => 'value3'];

1.3 配列へ要素を追加する

配列の末尾に追加する方法は簡単で「変数[]」でどんどん追加していくことができます。


$array = [];
$array[] = 1;

2. PHPで基本的な配列操作を行う関数

ここからPHPの豊富な配列操作の関数を紹介していきます。

2.1 配列をチェックする関数

最初に紹介するのは「is_array」と「in_array」です。どちらもbool型の返り値が返ってくる関数です。

is_arrayは対象の変数が「配列かどうか」を判定する関数です。配列ならばtrueを、配列でなければfalseを返します。


$array = [];
is_array($array); // true

$str = 'hoge';
is_array($str) // false

実は使いどころがとても多いわけではありませんが、エラーを出力するときに配列が来たら文字列に直すといったときや
配列が期待される関数へ渡すときに、配列かどうかチェックし配列でなければ配列にするといったように使います。

少しテクニック的なところがありますが便利な関数です。


// $messageが配列ならstringにする
$message = ['code' => 40, 'message' => 'this is error'];
$output = is_array($arary) ? implode(',', $message) : $message;

// 配列でなければ配列に変換する
$str = 'test';
$arg = is_array($str) ? $str : [$str];

in_arrayは第1引数の値が第2引数の配列に「入っているかどうか」を判定する関数です。これは例を見れば説明するまでもなく理解できると思います。

命名も役割も想像通りの良い関数です。


$array = [1, 2, 3, 4, 5];
in_array(1, $array); // true
in_array(8, $array); // false

さてわかりやすい関数なのですが、思考停止して使うのは避けたほうがいい関数でもあります。in_arrayは遅いことで有名なのです。

配列の要素数が膨大になる可能性があるなら、連想配列にしてissetで判定しましょう。


$array = [1 => 0, 2 => 0, 3 => 0, 4 => 0, 5 => 0];
isset($array[1]); // true
isset($array[8]); // false

上記の方法をとる場合、issetで判定する方法の他にarray_key_exists関数を使う方法があります。こちらに関してはどちらが速いのかは正直わかりませんが、array_key_existsを使ったほうが何を行おうとしているか明確で伝わりやすいかもしれません。

とは言えissetで確認する方法もかなりよく使われるものなので、これは各々使いたい方を使いましょう。


$array = [1 => 0, 2 => 0, 3 => 0, 4 => 0, 5 => 0];
array_key_exists(1, $array); // true
array_key_exists(8, $array); // false

2.2 配列の要素を操作する関数

次に紹介するのは配列の要素を操作する4つの関数「array_unshift」「array_shift」「array_push」「array_pop」です。

それぞれ2つで対になる関数ですので合わせて覚えると良いです。これらの関数は一般的に破壊的な関数と呼ばれるもので、関数に渡した配列そのものが変更されます。

通常の関数ですと渡した配列は変化せず、結果として新しい配列が返ってくるという動作をしますが、それとは別のものと考えなければなりません。

理解せずに使用すると思わぬバグになりますので、注意しましょう。

array_unshiftは「配列の最初に要素を加える」関数です。array_unshiftは渡した配列を書き換えるので、$arrayは4つの要素を持つ配列になります。関数の返り値は新しい配列の要素数です。


$array = [1,2,3];
array_unshift($array, 0); // $array は [0, 1, 2, 3]になる

// 複数の引数を受け付ける
$array = [1,2,3];
array_unshift($array, 0, 4, 6); // $array は [0, 4, 6, 1, 2, 3]になる

$array = [1,2,3];
$result = array_unshift($array, 0); // 関数の返り値は新しい配列の要素数(この場合 4 )

array_shift は array_unshiftの逆の操作を実行します。つまり「配列の最初から要素を1つ取り出す」という操作を行います。

これも配列自体が書き換わります。関数の返り値は取り出した値です。


$array = [1,2,3];
array_shift($array); // $array は [2,3]になる

$array = [1,2,3];
$result = array_shift($array); // $result は 1

array_pushは「配列の末尾に要素を加える」関数で、array_popは「配列の末尾から要素を1つ取り出す」関数です。

もはやarray_unshiftとarray_shiftの動作をそのまま末尾に変えただけの動作なので、あえてくどく説明はしませんが一応例を出しておきます。


$array = [1,2,3];
array_push($array, 4); // $array は[1,2,3,4]になる

$array = [1,2,3];
array_pop($array); // $array は[1,2]になる

これらはとても直感的でわかりやすい関数群だと思います。しかし、これらの関数だけに言えることではありませんが、やはり配列を破壊する関数を使うときは注意が必要であるということだけもう一度言っておきます。

まとめ

この記事ではPHPにおける配列のチェック関数と基本操作の関数を解説しました。冒頭でも述べたようにPHPには配列用の関数が充実しているので、それらを覚えるだけでもPHPerとして戦っていけるようになると思います。

全てを覚えるのはなかなか難しいかもしれないので、まずはこの記事で紹介した関数を足がかりにしていただければ幸いです。