Amazonランキング大賞2018

配列

インデックス配列

$numbers = [1, 2, 3, 4, 5];
または、
$numbers = array(1, 2, 3, 4, 5);

空の配列を作る
$numbers = [];
$numbers[] = 1;
$numbers[] = 2; //値が順々に追加されていく
$numbers[5] = 3; //インデックス 2〜4 はNULLのまま
$numbers[] = 4; //インデックス 6 に代入される

$numbers = array(); //arrayでも空配列は作れる

array_pushならば、まとめて最後尾に連続的に値を追加していける
array_push($numbers, 1, 2, 3, 4, 5);

下記は同処理だが、関数のオーバーヘッドがないぶん、[]= の方が高速。
$numbers[] = 1; //こちらの方が高速
array_push($numbers, 1); //オーバーヘッド分遅い
追加する要素が複数ならばarray_pushを使用する。

参考 array_pushPHP.net

連想配列

$変数名 = ["キー名" => 値];

$equip = ["weapon" => "銅の剣", "armor" => "皮の鎧", "shield" => "鉄の盾"];
または、
$equip = array("weapon" => "銅の剣", "armor" => "皮の鎧", "shield" => "鉄の盾");

キー名はシングルクォートかダブルクォートで囲む必要があるが、どちらを使っても良い。
ダブルクォートの場合、キー名に変数名が書かれていれば展開されることを留意。

キー名には日本語(マルチバイト文字)も使えるが、文字コードに注意。
UTF8かEUCを使う。ShiftJISはNG。

空の配列を作る
$equip = [];
$equip["weapon"] = "銅の剣"; //新規のキーと値が同時に設定される
$equip["armor"] = "皮の鎧";
$equip["shield"] = "鉄の盾";

array_pushは連想配列に対応していない

配列の個数を調べる

count(配列);

$numbers = [1, 2, 3, 4, 5];
$num = count($numbers);
echo $num; //出力 = 5

配列の末尾から要素を取り除く

mixed array_pop ( array &$array )
戻り値に最後尾の配列要素が返されて、配列の末尾から削除される

配列の先頭の要素を取り出して前詰めする

mixed array_shift ( array &$array )
戻り値に先頭の配列要素が返されて、インデックスが前詰めされる。

配列の先頭に要素を追加して後詰めする

int array_unshift ( array &$array , mixed $value1 [, mixed $... ] )

配列と配列を連結する

array array_merge ( array $array1 [, array $... ] )

$arrayA = [1, 2, 3, 4, 5];
$arrayB = ["A", "B", "C"];
$retArray = array_merge($arrayA, $arrayB);

retArrayの中身は 1, 2, 3, 4, 5, "A", "B", "C"

連想配列を連結してキーの値が重複した場合は、後から指定した値が前の値を上書きする。
※多次元配列にしてどちらも残す array_merge_recursive() というのもある

+演算子で連結する手段もあるが挙動の違いに注意
+演算子だと連結元よりもインデックスが大きい場所だけが追加される

$arrayA = [1, 2, 3, 4, 5];
$arrayB = ["A", "B", "C"];
$retArray = $arrayA + $arrayB;
中身は 1, 2, 3, 4, 5

$retArray = $arrayB + $arrayA;
中身は "A", "B", "C", 4, 5

文字列から配列を作る

array explode ( string $delimiter , string $string [, int $limit = PHP_INT_MAX ] )

参考 explodePHP.net

配列から文字列を作る

string implode ( string $glue , array $pieces )

参考 implodePHP.net

配列の要素を削除する

$retArray = array_splice(&$srcArray, $offset, $length);
offset 削除開始地点のインデックス
length 削除する個数。省略した場合はoffset地点から最後尾までが対象。
戻り値 削除された要素が、配列として返る

$srcArray = [1, 2, 3, 4, 5];
$retArray = array_splice($srcArray, 1, 2);
結果:$srcArray = 1, 4, 5 $retArray = 2, 3

配列を切り出す

$retArray = array_slice(&$srcArray, $offset, $length=NULL, preserve_keys=false);

offset

切り出し開始地点のインデックス。負の値を指定した場合、最後尾からのオフセットになる。

length

切り出す個数。配列の要素数を越えている場合は取得できる分だけに補整される。
負の値の場合、配列の最後尾から連続する複数の要素が返される。
省略した場合は、オフセット位置から最後尾までが対象となる。

preserve_keys

false(デフォルト) スライス実行後、ソース元の配列のインデックス番号をリセットする。
true スライス実行後も、ソース元のインデックス番号をキープする。

$srcArray = [1, 2, 3, 4, 5];
$retArray = array_slice($srcArray, 0, 3); //結果:1, 2, 3
$retArray = array_slice($srcArray, 3, 2); //結果:4, 5
$retArray = array_slice($srcArray, -3); //結果:3, 4, 5

参考 array_slicePHP.net