PHPには配列関連の関数が87個も用意されています。
全部を一気に把握するのは大変なので、ここではよく使う関数や知っておくと便利な関数を21個に厳選してご紹介します!
配列をつくる
array() 配列を生成する
array()で配列を作成することができます(便宜上関数扱いしていますが、array()は言語構成要素です)。
$colors = array('red', 'blue', 'yellow');
PHP5.4以降では、array()の代わりに[]を使っても同じことができます(実際には[]を使う場面の方が多い気がします)。
$colors = ['red', 'blue', 'yellow'];
compact() 変数名とその値から配列を作成する
compact()は、引数として与えられた変数名をキーに、変数の値をそのキーの値にした配列を作成してくれます。
<?php
$age = 20;
$result = compact('age');
var_dump($result);
// array(1) { ["age"]=> int(20) }
引数の数は可変になっていて、複数の変数名を1つの配列にすることもできます。
<?php
$age = 20;
$nickname = 'くらげ';
$result = compact('age', 'nickname');
var_dump($result);
// array(2) { ["age"]=> int(20) ["nickname"]=> string(9) "くらげ" }
例えばControllerで扱っていた変数を、Viewに配列として一気に渡したいときなどに便利です。
explode() 文字列を分割して配列にする
explode()は、文字列を任意の文字列で分割して配列にすることができます。
<?php
$color = "red,blue,pink,orange,green";
$colors = explode(',', $color);
var_dump($colors);
// array(5) { [0]=> string(3) "red" [1]=> string(4) "blue" [2]=> string(4) "pink" [3]=> string(6) "orange" [4]=> string(5) "green" }
配列から文字列等をつくる
implode() 配列要素を文字列により連結する
implode()はexplode()の逆で、配列を任意の文字列で連結して、文字列として返してくれます。
<?php
$colors = ['red', 'blue', 'pink', 'orange', 'green'];
$color = implode(',', $colors);
var_dump($color);
// string(26) "red,blue,pink,orange,green"
list()配列と同様の形式で、複数の変数への代入を行う
list()の引数に変数を渡し配列を代入すると、代入された配列の値が各変数に代入されます(便宜上関数扱いしていますが、list()は言語構成要素です)。
<?php
$profile = array('くらげ', '3歳', 'PHP');
list($nickname, $age, $lang) = $profile;
echo "{$nickname}さんの年齢は{$age}で、{$lang}が得意です。";
// くらげさんの年齢は3歳で、PHPが得意です。
配列の一部を変数に代入したくない場合は、その部分の引数を空欄にします。
<?php
$profile = array('くらげ', '3歳', 'PHP');
list($nickname, , $lang) = $profile;
echo "{$nickname}さんは{$lang}が得意です。";
// くらげさんはPHPが得意です。
配列要素の追加
array_unshift() 要素を配列の最初に加える
array_unshift()を使うと、第一引数として渡した配列の先頭に第二引数の値を加えることができます。
配列の文字列キーは変更されませんが、数値キーは全て振り直されます。
<?php
$colors = array(
100 => 'red',
200 => 'orange',
'last' => 'black'
);
array_unshift($colors, 'blue');
var_dump($colors);
// array(4) { [0]=> string(4) "blue" [1]=> string(3) "red" [2]=> string(6) "orange" ["last"]=> string(5) "black" }
array_push() 要素を配列の最後に追加する
array_unshift()を使うと、第一引数として渡した配列の最後に第二引数の値を加えることができます。
<?php
$colors = array(
100 => 'red',
200 => 'orange',
'last' => 'black'
);
array_push($colors, 'blue');
var_dump($colors);
// array(4) { [100]=> string(3) "red" [200]=> string(6) "orange" ["last"]=> string(5) "black" [201]=> string(4) "blue" }
array_merge() 配列をマージする
array_merge()を使うと、引数で渡された配列同士をマージしてくれます。
各配列の文字列キーは、後ろの配列に同じキーがあると上書きされるので注意が必要です。数値キーは上書きされずに追加されていきます。
<?php
$colors = array(
'red',
'orange',
'last' => 'black'
);
$colors2 = array(
'blue',
'green',
'last' => 'white'
);
$result = array_merge($colors, $colors2);
var_dump($result);
// array(5) { [0]=> string(3) "red" [1]=> string(6) "orange" ["last"]=> string(5) "white" [2]=> string(4) "blue" [3]=> string(5) "green" }
配列要素の削除
array_shift() 配列の先頭から要素を一つ取り出す
array_shift()は、引数に渡された配列の先頭の要素を返し、配列からはその要素が取り除かれて数値キーは振り直されます。
<?php
$colors = array(
1 => 'red',
100 => 'orange',
200 => 'black'
);
$first_color = array_shift($colors);
var_dump($first_color);
// string(3) "red"
var_dump($colors);
// array(2) { [0]=> string(6) "orange" [1]=> string(5) "black" }
array_pop() 配列の末尾から要素を取り除く
array_pop()は、引数に渡された配列の最後の要素を返し、配列からはその要素が取り除かれます。
<?php
$colors = array(
1 => 'red',
100 => 'orange',
200 => 'black'
);
$last_color = array_pop($colors);
var_dump($last_color);
// string(5) "black"
var_dump($colors);
// array(2) { [1]=> string(3) "red" [100]=> string(6) "orange" }
array_unique() 配列から重複した値を削除する
array_unique()は、引数に渡した配列から重複した値を削除して返してくれます。
<?php
$colors = array(
1 => 'red',
100 => 'orange',
200 => 'black',
300 => 'red'
);
$unique_colors = array_unique($colors);
var_dump($unique_colors);
// array(3) { [1]=> string(3) "red" [100]=> string(6) "orange" [200]=> string(5) "black" }
この関数を使うとき、型は自動変換された上で比較されるので注意が必要です。
例えば以下のような場合はすべて同じものと判断されます。
<?php
$types = array(
'boolean' => true,
'int' => 1,
'string' => '1'
);
$result = array_unique($types);
var_dump($result);
// array(1) { ["boolean"]=> bool(true) }
続きは後編に書きます!