PHP - 配列

配列

PHP の配列は、順番付けられたマップです。マップは型の一種で、値をキーに関連付けます。PHP の配列は、配列としてだけでなく、リスト、 ハッシュテーブル、辞書、コレクション、スタック、キューとして使用することが可能です。PHP の配列には他の PHP 配列を値として保持することができるため、非常に簡単にツリー構造を表現することが可能です。

配列は array() で作成することが可能です。この構造は、特定の数のカンマで区切られた「キー => 値」の組を引数とします。

<?php
  $array = array(
    key1 => value1,
    key2 => value2,
    key3 => value3,
  );
?>
PHP の配列

array()[ ] で置き換えた、配列の短縮構文も使えます。

<?php
  $array = array(
    "foo" => "bar",
    "bar" => "foo",
  );

  // 配列の短縮構文
  $array = [
    "foo" => "bar",
    "bar" => "foo",
  ];
?>
配列の短縮構文

key は、整数、または文字列です。value には任意の型を指定できます。ただし、以下の場合は key のキャストが発生します。

  • 10 進数の int として妥当な形式の String は、数値の前に + 記号がついていない限り、int 型にキャストされます。例えば、キーに "8" を指定すると、8 として格納されます。
  • float は int にキャストされます(小数部分の切り捨て)。例えば、キーに 8.7 を指定すると、8 として格納されます。
  • bool は int にキャストされます。例えば、キーに true を指定すると 1 として格納され、false を指定すると 0 として格納されます。
  • null は空文字列にキャストされます。つまり、キーに null を指定すると、"" として格納されます。
  • キーとして使用できない型を指定すると Illegal offset type の警告が発生します。

以下の例では、すべてのキーが 1 にキャストされます。そして後から指定した値が前の値を上書きしていき、最終的には最後に代入された "d" だけが残ります。

<?php
  $array = array(
    1    => "a",
    "1"  => "b",
    1.5  => "c",
    true => "d",
  );
  var_dump($array);
  
  /*
  array(1) {
    [1]=>
    string(1) "d"
  }
  */
?>
key のキャスト

key はオプションで、省略可能です。key を省略した場合、これまでに使われた整数のキーの中で最大のものに 1 を加えた値を使います。

<?php
  $array = array("foo", "bar");
  var_dump($array);
  
  /*
  array(2) {
    [0]=>
    string(3) "foo"
    [1]=>
    string(3) "bar"
  }
  */
?>
key を省略した配列

一部の要素にだけキーを指定することもできます。

<?php
  $array = array(
         "a",
         "b",
    6 => "c",
         "d",
  );
  var_dump($array);
  
  /*
  array(4) {
    [0]=>
    string(1) "a"
    [1]=>
    string(1) "b"
    [6]=>
    string(1) "c"
    [7]=>
    string(1) "d"
  }
  */
?>
一部の要素にだけキーを指定した配列

配列要素へのアクセス

配列の要素へのアクセスには array[key]、または array{key} 構文を使います。

<?php
  $array = array(
    "foo" => "bar"
  );
  var_dump($array["foo"]); // string(3) "bar"
?>
配列要素へのアクセス

配列に定義されていないキーへアクセスしたときの挙動は、未定義の変数にアクセスした結果と同じく NULL となります。PHP 7.4.0 より前のバージョンでは、何もエラーは発生しませんでした。PHP 7.4.0 以降では E_NOTICE メッセージが発生します。PHP 8.0.0 以降では E_WARNING メッセージが発生します。

<?php
  $array = array(
    "foo" => "bar"
  );
  var_dump($array["Hello"]); // NULL
?>
未定義の配列要素へのアクセス

明示的に値を設定することにより、既存の配列を修正することも可能です。

<?php
  $array = array(
    "foo" => "bar"
  );
  $array["foo"] = "Hello";
  var_dump($array["foo"]); // string(5) "Hello"
?>
既存の配列の修正

まだ存在しない配列の場合は、新しく作成されます。ただし、この方法で新しく配列を作成するのは、バグの原因となるため非推奨とされています。

<?php
  $array["foo"] = "Hello";
  var_dump($array["foo"]); // string(5) "Hello"
?>
既存の配列の修正

特定のキー・値の組を削除したい場合は unset() を使用します。

<?php
  $array = array(
    "key1" => "value1",
    "key2" => "value2",
  );
  
  unset($array["key1"]); // 配列から要素を削除します
  unset($array);         // 配列全体を削除します
?>
特定の要素、および配列の削除

関連記事