配列

配列はハッシュテーブル(連想配列) スカラー配列(ベクトル)のどちらとしても動作します。

1次元の配列

PHP は、スカラーおよび連想配列を共にサポートします。 実際、両者の間に違いはありません。 配列は、list() またはarray() で作成することもできますし、 配列の各要素の値を明示的にセットすることにより作成することもできます。

  1  
  2 $a[0] = "abc"; 
  3 $a[1] = "def"; 
  4 $b["foo"] = 13;
  5       

配列に値を加える操作だけでも配列を作成することができます。 空の角括弧で配列変数に値を代入した場合、その値は配列の最後の要素として 追加されます。

  1  
  2 $a[] = "hello"; // $a[2] == "hello"
  3 $a[] = "world"; // $a[3] == "world" 
  4       

配列はソートしたい型に応じて asort()arsort()ksort()rsort()sort()uasort()usort()uksort() 関数によりソートすることが可能です。

count() 関数を用いて、ある配列の 要素数をカウントすることができます。

next()prev() 関数を 用いて配列の中で移動することができます。 他に配列の中での移動法として一般的なのは、 each() 関数です。

多次元配列

多次元配列の指定は簡単です。 配列の各次元毎に後ろに他の[キー]を付加します。

  1  
  2 $a[1]      = $f;               # 1次元の配列の例
  3 $a["foo"]  = $f;   
  4 
  5 $a[1][0]     = $f;             # 2次元
  6 $a["foo"][2] = $f;             # (数値添字と連想添字を混用できます)
  7 $a[3]["bar"] = $f;             # (数値添字と連想添字を混用できます)
  8 
  9 $a["foo"][4]["bar"][0] = $f;   # 4次元!
 10       

PHP3 では、直接文字列の中で多次元配列を参照することができませんでした。 例えば、次の例では望む結果を得られません。

  1  
  2  $a[3]['bar'] = 'Bob';
  3  echo "これは動作しません: $a[3][bar]";
  4  	  

PHP3 では、上の例は、 これは動作しません: Array[bar] を出力します。 しかし、文字列結合演算子を使用して、これを解決することができます。

  1 
  2  $a[3]['bar'] = 'Bob';
  3  echo "これは動作します: " . $a[3][bar];
  4  	  

しかし、PHP4 では(文字列の中で)配列参照を波括弧で囲むことにより この問題は回避されました。

  1 
  2  $a[3]['bar'] = 'Bob';
  3  echo "これは動作します: {$a[3][bar]}";
  4  	  

多次元配列にいろいろな手法で値を入れることができます。 最も技巧的なのは、連想配列に関する array() コマンドの の使用法です。 2つのコードは、1次元配列に同じ手法で代入しています。

  1  
  2 # 例 1:
  3 
  4 $a["color"]	= "red";
  5 $a["taste"]	= "sweet";
  6 $a["shape"]	= "round";
  7 $a["name"]	= "apple";
  8 $a[3]		= 4;
  9 
 10 
 11 # 例 2:
 12 $a = array(
 13      "color" => "red",
 14      "taste" => "sweet",
 15      "shape" => "round",
 16      "name"  => "apple",
 17      3       => 4
 18 );
 19       

array() 関数は多次元配列に関してネストして 使用することができます。

  1  
  2 <?
  3 $a = array(
  4      "apple"  => array(
  5           "color"  => "red",
  6           "taste"  => "sweet",
  7           "shape"  => "round"
  8      ),
  9      "orange"  => array(
 10           "color"  => "orange",
 11           "taste"  => "tart",
 12           "shape"  => "round"
 13      ),
 14      "banana"  => array(
 15           "color"  => "yellow",
 16           "taste"  => "paste-y",
 17           "shape"  => "banana-shaped"
 18      )
 19 );
 20 
 21 echo $a["apple"]["taste"];    # "sweet" を出力します
 22 ?>
 23