1D 配列
PHPの配列は、順番付けられたマップです。マップは、ベクトル 、リスト、ハッシュ、 コレクション、スタック、キュー、ツリーなどのデータ構造を表現することができます。
PHPの配列は、Perlのリストとハッシュの機能を兼ね備え、拡張した実装になっています。 また、C言語の配列とは基本的に異なった発想ですがエミュレートする事はできます。
PHPの配列は、
- 添字配列
- 連想配列
- またはその混合型
添字配列は、(0以上の)最大添字を保持しており、暗黙的に使用する事ができます。 最大の添字が負数の場合、暗黙の添字は常に0になります。
添字配列のキーは自然な整数で表記し、連想配列のキーは文字列で表記します。 0,1,2などは添字配列のキーです。'1','2'の文字列も添字配列のキーとして扱われますが、 '01'や'02'の(不自然な整数)は、文字列として扱われ連想配列になります。
PHP配列の順序付けは(Perlのリストやハッシュと同じで)登録の順であり、 添字やキーとは無関係です。
1D.1 配列の操作
1D.1.1 配列の生成
配列には幾つかの種類がありますが、以下の方法で生成することが出来ます。
| 種類 | 用例 |
|---|---|
| 空の配列 |
$empty = array(); //empty($empty)はTUREですがis_null($empty)はFALSEです |
| 添字配列 |
$a1 = array(1,2,3); //暗黙の添字は0から始まります
$a2 = array(0=>1,1=>2,2=>3); //$a1と同じです(全ての添字を明示)
$a3 = array(0=>1,2,3); //$a1と同じです(最初の添字のみ明示)
$a4 = array(1=>1,2,3); //暗黙の添字は1から始まります
$a5 = array(-3=>1,-2=>2,-1=>3); //負の添字も使用できます
$a6 = array(-3=>1,2,3); //$a5と同じではありません
//(添字は-3,0,1と付きます)
|
| 連想配列 |
$NG = array(A=>1,B=>2,C=>3); //裸の文字列をキーにしています(非推奨)
$b1 = array('A'=>1,'B'=>2,'C'=>3); //連想配列のキーは''で括ります
$b2 = array('1'=>1,'2'=>2,'3'=>3); //これは添字配列になります
$b3 = array('01'=>1,'02'=>2,'03'=>3); //これは連想配列になります
|
| 混合型 |
$c1 = array(0=>1,2,3,'A'=>1,'B'=>2,'C'=>3); |
1D.1.2 配列の値
配列の値にはPHPの全ての型が使用できます。 従って、多重配列やオブジェクトの配列を作る事もできます。
class foo_class {
var $bar;
}
$obj = new square_class;
$arr = array(1, 1.2, "ABC", FALSE, //スカラー型(整数,浮動少数点数,文字列,論理型)
array(1,2,3), //配列
$obj, //オブジェクト
NULL); //NULL値
1D.1.3 配列の編集
配列を参照または編集する場合は、鍵括弧([])を使います。
| 種類 | 用例 |
|---|---|
| 配列の生成 |
// 以下は$arr=array(0=>1,1=>2); と同じです $arr[] = 1; //または $arr[0] = 1; $arr[] = 2; //または $arr[1] = 2; |
| 要素の追加 |
$arr=array(0=>1,1=>2); $arr[] = 3; //$arr[2]=3; を追加します |
| 要素の削除 |
unset($arr[0]); // 配列から要素を削除します |
| 配列の削除 |
unset($arr); // 配列全体を削除します |
1D.1.4 添字配列の再構築
PHPの添字配列は、(0以上の)最大添字を保持しており、暗黙的に使用する事ができます。 最大添字はunset()関数によって配列の要素を削除しても残り続けます。 添字配列を再構築するにはarray_values()関数を使います。
$arr = array(1, 2, 3, 4, 5); // 配列を生成します。
foreach ($arr as $i => $value){ // 全ての配列要素を削除しますが配列自体は残ります
unset($arr[$i]); // (最大添字は5のまま)
}
$arr[] = 6; // $arr[5]=6; と同じです(新しい添字は0ではなく5です)
$array = array_values($array); // 添字配列の再構築
1D.1.5 裸の文字列をキーに出来ない理由
連想配列のキーの前後は常に引用符で括る必要があります。
$foo[bar]=1; // NG $foo['bar']=1; // OK
$foo[bar]は誤りですが、下位互換性の維持のために動作します。 $foo[bar] のbar は構文的には「未定義の定数」になります。 PHPでは古いコードの為に、未定義の定数を同じ名前の文字列に自動変換する機能が残っています。 しかし、barという定数が定義されている場合は、思い通りの動作をしません。
