<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/language.types.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'ja',
  ),
  'this' => 
  array (
    0 => 'language.types.array.php',
    1 => '配列',
    2 => '配列',
  ),
  'up' => 
  array (
    0 => 'language.types.php',
    1 => '型',
  ),
  'prev' => 
  array (
    0 => 'language.types.numeric-strings.php',
    1 => '数値形式の文字列',
  ),
  'next' => 
  array (
    0 => 'language.types.object.php',
    1 => 'オブジェクト',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'ja',
    'path' => 'language/types/array.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="language.types.array" class="sect1">
 <h2 class="title">配列</h2>

 <p class="para">
  全ての配列関数の一覧は、<a href="ref.array.php" class="link">配列関数</a>
  を参照ください。
 </p>

 <p class="para">
  PHP の配列は、実際には順番付けられたマップです。マップは型の一種で、
  <em>値</em>を<em>キー</em>に関連付けます。
  この型は、さまざまな使い道にあわせて最適化されます。
  配列としてだけでなく、リスト (ベクター)、
  ハッシュテーブル (マップの実装の一つ)、辞書、コレクション、スタック、
  キュー等として使用することが可能です。
  PHP の配列には他の PHP 配列を値として保持することができるため、
  非常に簡単にツリー構造を表現することが可能です。
 </p>

 <p class="para">
  これらのデータ構造に関する説明は本マニュアルの範囲を超えるので省略しますが、
  各々について、少なくとも一つは例を示します。
  この分野は広範囲にまたがり、さまざまな文献が存在します。
  より詳細な情報については、それらの文献を参照ください。
 </p>
   
 <div class="sect2" id="language.types.array.syntax">
  <h3 class="title">構文</h3>
  
  <div class="sect3" id="language.types.array.syntax.array-func">
   <h4 class="title"><span class="function"><a href="function.array.php" class="function">array()</a></span> で指定</h4>

   <p class="para">
    配列(<span class="type"><a href="language.types.array.php" class="type array">array</a></span>)は、言語に組み込まれた
    <span class="function"><a href="function.array.php" class="function">array()</a></span> で作成することが可能です。この構造は、
    特定の数のカンマで区切られた
    <code class="literal"><span class="replaceable">key</span> =&gt; <span class="replaceable">value</span></code> の組を引数とします。
   </p>

   <pre class="synopsis">
array(
    <span class="optional"><span class="replaceable">key</span>  =&gt; </span><span class="replaceable">value</span>,
    <span class="optional"><span class="replaceable">key2</span> =&gt; </span><span class="replaceable">value2</span>,
    <span class="optional"><span class="replaceable">key3</span> =&gt; </span><span class="replaceable">value3</span>,
    ...
)</pre>
   

   <p class="para">
    最後の要素のあとのカンマは、書いても書かなくてもかまいません。
    配列を一行で定義する場合は、ふつうは最後のカンマを省略します。つまり、
    <code class="literal">array(1, 2)</code> のほうが
    <code class="literal">array(1, 2, )</code> よりおすすめだということです。
    しかし複数行で定義する場合は、最後のカンマをつけることが一般的です。
    そうしておけば、配列の最後に要素を追加するのが容易になるからです。
   </p>
   
   <blockquote class="note"><p><strong class="note">注意</strong>: 
    <p class="para">
     <code class="literal">array()</code> を <code class="literal">[]</code>
     で置き換えることが出来る、配列の短縮構文も使えます。
    </p>
   </p></blockquote>
   
   <div class="example" id="example-1">
    <p><strong>例1 シンプルな配列定義</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$array1 </span><span style="color: #007700">= array(<br />    </span><span style="color: #DD0000">"foo" </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">"bar"</span><span style="color: #007700">,<br />    </span><span style="color: #DD0000">"bar" </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">"foo"</span><span style="color: #007700">,<br />);<br /><br /></span><span style="color: #FF8000">// 配列の短縮構文<br /></span><span style="color: #0000BB">$array2 </span><span style="color: #007700">= [<br />    </span><span style="color: #DD0000">"foo" </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">"bar"</span><span style="color: #007700">,<br />    </span><span style="color: #DD0000">"bar" </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">"foo"</span><span style="color: #007700">,<br />];<br /><br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$array1</span><span style="color: #007700">, </span><span style="color: #0000BB">$array2</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
   
   <p class="para">
    <var class="varname">key</var> は、<span class="type"><a href="language.types.integer.php" class="type int">int</a></span> または
    <span class="type"><a href="language.types.string.php" class="type string">string</a></span>です。
    <span class="replaceable">value</span> には任意の型を指定できます。
   </p>

   <p class="para" id="language.types.array.key-casts">
    さらに、次のような <span class="replaceable">key</span> のキャストが発生します。
    <ul class="itemizedlist">
     <li class="listitem">
      <span class="simpara">
       10 進数の <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> として妥当な形式の <span class="type"><a href="language.types.string.php" class="type String">String</a></span> は、
       数値の前に <code class="literal">+</code> 記号がついていない限り、
       <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> 型にキャストされます。
       つまり、キーに <code class="literal">&quot;8&quot;</code> を指定すると、実際には
       <code class="literal">8</code> として格納されるということです。一方 <code class="literal">&quot;08&quot;</code>
       はキャストされません。これは十進数として妥当な形式ではないからです。
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       <span class="type"><a href="language.types.float.php" class="type float">float</a></span>s もまた <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> にキャストされます。つまり、
       小数部分は切り捨てられるということです。たとえばキーに <code class="literal">8.7</code> を指定すると、実際には
       <code class="literal">8</code> として格納されます。
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span> も <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> にキャストされます。つまり、
       キーに <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> を指定すると実際には <code class="literal">1</code> に格納され、
       同様にキーを <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> とすると実際には <code class="literal">0</code> となります。
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       <span class="type"><a href="language.types.null.php" class="type Null">Null</a></span> は空文字列にキャストされます。つまり、キーに
       <code class="literal">null</code> を指定すると、実際には <code class="literal">&quot;&quot;</code> として格納されます。
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       <span class="type"><a href="language.types.array.php" class="type array">array</a></span> や <span class="type"><a href="language.types.object.php" class="type object">object</a></span> は、キーとして<em>使えません</em>。
       キーとして使おうとすると <code class="literal">Illegal offset type</code> という警告が発生します。
      </span>
     </li>
    </ul>
   </p>
   
   <p class="para">
    配列の宣言時に同じキーで複数の要素を指定すると、
    最後に指定したものがそれまでの値を上書きします。
   </p>
   
   <div class="example" id="example-2">
    <p><strong>例2 型のキャストと値の上書きの例</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$array </span><span style="color: #007700">= array(<br />    </span><span style="color: #0000BB">1    </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">"a"</span><span style="color: #007700">,<br />    </span><span style="color: #DD0000">"1"  </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">"b"</span><span style="color: #007700">,<br />    </span><span style="color: #0000BB">1.5  </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">"c"</span><span style="color: #007700">,<br />    </span><span style="color: #0000BB">true </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">"d"</span><span style="color: #007700">,<br />);<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$array</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    <div class="example-contents"><p>上の例の出力は以下となります。</p></div>
    <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
array(1) {
  [1]=&gt;
  string(1) &quot;d&quot;
}
</pre></div>
    </div>
    <div class="example-contents"><p>
     上の例では、すべてのキーが <code class="literal">1</code> にキャストされます。
     そして後から指定した値がどんどん前の値を上書きしていき、最終的には最後に代入された
     <code class="literal">&quot;d&quot;</code> だけが残ります。
    </p></div>
   </div>  
   
   <p class="para">
    PHP においては添字配列と連想配列の間に違いはなく、配列型は 1 つだけで、
    同じ配列で整数のインデックスと文字列のインデックスを同時に使えます。
   </p>
   
   <div class="example" id="example-3">
    <p><strong>例3 整数と文字列のキーの混在例</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$array </span><span style="color: #007700">= array(<br />    </span><span style="color: #DD0000">"foo" </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">"bar"</span><span style="color: #007700">,<br />    </span><span style="color: #DD0000">"bar" </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">"foo"</span><span style="color: #007700">,<br />    </span><span style="color: #0000BB">100   </span><span style="color: #007700">=&gt; -</span><span style="color: #0000BB">100</span><span style="color: #007700">,<br />    -</span><span style="color: #0000BB">100  </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">100</span><span style="color: #007700">,<br />);<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$array</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    <div class="example-contents"><p>上の例の出力は以下となります。</p></div>
    <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
array(4) {
  [&quot;foo&quot;]=&gt;
  string(3) &quot;bar&quot;
  [&quot;bar&quot;]=&gt;
  string(3) &quot;foo&quot;
  [100]=&gt;
  int(-100)
  [-100]=&gt;
  int(100)
}
</pre></div>
    </div>
   </div>
   
   <p class="para">
    <span class="replaceable">key</span> はオプションです。省略した場合、PHP
    はこれまでに使われた整数のキーの中で最大のものに 1 を加えた値を使います。
   </p>
   
   <div class="example" id="example-4">
    <p><strong>例4 数値添字配列でキーを省略する例</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$array </span><span style="color: #007700">= array(</span><span style="color: #DD0000">"foo"</span><span style="color: #007700">, </span><span style="color: #DD0000">"bar"</span><span style="color: #007700">, </span><span style="color: #DD0000">"hello"</span><span style="color: #007700">, </span><span style="color: #DD0000">"world"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$array</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    <div class="example-contents"><p>上の例の出力は以下となります。</p></div>
    <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
array(4) {
  [0]=&gt;
  string(3) &quot;foo&quot;
  [1]=&gt;
  string(3) &quot;bar&quot;
  [2]=&gt;
  string(5) &quot;hello&quot;
  [3]=&gt;
  string(5) &quot;world&quot;
}
</pre></div>
    </div>
   </div>
   
   <p class="para">
    一部の要素にだけキーを指定することもできます。
   </p>
   
   <div class="example" id="example-5">
    <p><strong>例5 一部の要素にだけキーを指定する例</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$array </span><span style="color: #007700">= array(<br />         </span><span style="color: #DD0000">"a"</span><span style="color: #007700">,<br />         </span><span style="color: #DD0000">"b"</span><span style="color: #007700">,<br />    </span><span style="color: #0000BB">6 </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">"c"</span><span style="color: #007700">,<br />         </span><span style="color: #DD0000">"d"</span><span style="color: #007700">,<br />);<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$array</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    <div class="example-contents"><p>上の例の出力は以下となります。</p></div>
    <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
array(4) {
  [0]=&gt;
  string(1) &quot;a&quot;
  [1]=&gt;
  string(1) &quot;b&quot;
  [6]=&gt;
  string(1) &quot;c&quot;
  [7]=&gt;
  string(1) &quot;d&quot;
}
</pre></div>
    </div>
    <div class="example-contents"><p>
     ごらんの通り、最後の値である <code class="literal">&quot;d&quot;</code> のキーは
     <code class="literal">7</code> となります。それまでにキーとして使われた最大の整数が
     <code class="literal">6</code> だからです。
    </p></div>
   </div>

   <div class="example" id="example-6">
    <p><strong>例6 複雑な型のキャストと上書きの例</strong></p>
    <div class="example-contents"><p>
     以下の例は、型のキャストされた時と、要素が上書きされる時の全ての場合を示しています。
    </p></div>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$array </span><span style="color: #007700">= array(<br />    </span><span style="color: #0000BB">1    </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'a'</span><span style="color: #007700">,<br />    </span><span style="color: #DD0000">'1'  </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'b'</span><span style="color: #007700">, </span><span style="color: #FF8000">// 値 "a" は "b" で上書きされます。<br />    </span><span style="color: #0000BB">1.5  </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'c'</span><span style="color: #007700">, </span><span style="color: #FF8000">// 値 "b" は "c" で上書きされます。<br />    </span><span style="color: #007700">-</span><span style="color: #0000BB">1 </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'d'</span><span style="color: #007700">,<br />    </span><span style="color: #DD0000">'01'  </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'e'</span><span style="color: #007700">, </span><span style="color: #FF8000">// この値は数値形式の文字列ではないので、キー1を上書きしません<br />    </span><span style="color: #DD0000">'1.5' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'f'</span><span style="color: #007700">, </span><span style="color: #FF8000">// この値は数値形式の文字列ではないので、キー1を上書きしません<br />    </span><span style="color: #0000BB">true </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'g'</span><span style="color: #007700">, </span><span style="color: #FF8000">// 値 "c" は "g" で上書きされます。<br />    </span><span style="color: #0000BB">false </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'h'</span><span style="color: #007700">,<br />    </span><span style="color: #DD0000">'' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'i'</span><span style="color: #007700">,<br />    </span><span style="color: #0000BB">null </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'j'</span><span style="color: #007700">, </span><span style="color: #FF8000">// 値 "i" は "j" で上書きされます。<br />    </span><span style="color: #DD0000">'k'</span><span style="color: #007700">, </span><span style="color: #FF8000">// 値 "k" にはキー2が割り当てられます。なぜなら、これより前のキーの最大値は1だからです。<br />    </span><span style="color: #0000BB">2 </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'l'</span><span style="color: #007700">, </span><span style="color: #FF8000">// 値 "k" は "l" で上書きされます。<br /></span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$array</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    <div class="example-contents"><p>上の例の出力は以下となります。</p></div>
    <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
array(7) {
  [1]=&gt;
  string(1) &quot;g&quot;
  [-1]=&gt;
  string(1) &quot;d&quot;
  [&quot;01&quot;]=&gt;
  string(1) &quot;e&quot;
  [&quot;1.5&quot;]=&gt;
  string(1) &quot;f&quot;
  [0]=&gt;
  string(1) &quot;h&quot;
  [&quot;&quot;]=&gt;
  string(1) &quot;j&quot;
  [2]=&gt;
  string(1) &quot;l&quot;
}

</pre></div>
    </div>
   </div>

   <div class="example" id="example-7">
    <p><strong>例7 負のインデックスの例</strong></p>
    <div class="example-contents"><p>
     負の整数キー <code class="literal">n</code> を代入すると、PHP は次のキーを <code class="literal">n+1</code> に代入します。
    </p></div>
    <div class="example-contents">
     <div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$array </span><span style="color: #007700">= [];<br /><br /></span><span style="color: #0000BB">$array</span><span style="color: #007700">[-</span><span style="color: #0000BB">5</span><span style="color: #007700">] = </span><span style="color: #0000BB">1</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$array</span><span style="color: #007700">[] = </span><span style="color: #0000BB">2</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$array</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    <div class="example-contents"><p>上の例の出力は以下となります。</p></div>
    <div class="example-contents screen">
     <div class="annotation-interactive cdata"><pre>
array(2) {
  [-5]=&gt;
  int(1)
  [-4]=&gt;
  int(2)
}
</pre></div>
    </div>

    <div class="warning"><strong class="warning">警告</strong>
     <p class="simpara">
      PHP 8.3.0 より前のバージョンでは、負の整数キー <code class="literal">n</code> を代入すると、
      次のキーは <code class="literal">0</code> に代入されていました。
      そのため、前の例は次のように出力されていました:
     </p>
     <div class="informalexample">
      <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
array(2) {
  [-5]=&gt;
  int(1)
  [0]=&gt;
  int(2)
}
</pre></div>
      </div>
     </div>
    </div>
   </div>
  </div>
  
  <div class="sect3" id="language.types.array.syntax.accessing">
   <h4 class="title">角括弧構文による配列要素へのアクセス</h4>
   
   <p class="para">
    配列の要素へのアクセスには <code class="literal">array[key]</code> 構文を使います。
   </p>
   
   <div class="example" id="example-8">
    <p><strong>例8 配列の要素へのアクセス</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$array </span><span style="color: #007700">= array(<br />    </span><span style="color: #DD0000">"foo" </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">"bar"</span><span style="color: #007700">,<br />    </span><span style="color: #0000BB">42    </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">24</span><span style="color: #007700">,<br />    </span><span style="color: #DD0000">"multi" </span><span style="color: #007700">=&gt; array(<br />         </span><span style="color: #DD0000">"dimensional" </span><span style="color: #007700">=&gt; array(<br />             </span><span style="color: #DD0000">"array" </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">"foo"<br />         </span><span style="color: #007700">)<br />    )<br />);<br /><br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$array</span><span style="color: #007700">[</span><span style="color: #DD0000">"foo"</span><span style="color: #007700">]);<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$array</span><span style="color: #007700">[</span><span style="color: #0000BB">42</span><span style="color: #007700">]);<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$array</span><span style="color: #007700">[</span><span style="color: #DD0000">"multi"</span><span style="color: #007700">][</span><span style="color: #DD0000">"dimensional"</span><span style="color: #007700">][</span><span style="color: #DD0000">"array"</span><span style="color: #007700">]);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    <div class="example-contents"><p>上の例の出力は以下となります。</p></div>
    <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
string(3) &quot;bar&quot;
int(24)
string(3) &quot;foo&quot;
</pre></div>
    </div>
   </div>
   
   <blockquote class="note"><p><strong class="note">注意</strong>: 
    <p class="para">
     PHP 8.0.0 より前のバージョンでは、
     配列の要素にアクセスするときに、
     角括弧と波括弧がどちらも同じ意味で使えていました。
     (つまり、この例で <code class="literal">$array[42]</code> と <code class="literal">$array{42}</code>
     は同じものを表しているということです)。
     波括弧で配列にアクセスする文法は、
     PHP 7.4.0 以降は非推奨になり、
     PHP 8.0.0 以降はサポートされなくなっています。
    </p>
   </p></blockquote>

   <div class="example" id="example-9">
    <p><strong>例9 配列のデリファレンス</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">getArray</span><span style="color: #007700">() {<br />    return array(</span><span style="color: #0000BB">1</span><span style="color: #007700">, </span><span style="color: #0000BB">2</span><span style="color: #007700">, </span><span style="color: #0000BB">3</span><span style="color: #007700">);<br />}<br /><br /></span><span style="color: #0000BB">$secondElement </span><span style="color: #007700">= </span><span style="color: #0000BB">getArray</span><span style="color: #007700">()[</span><span style="color: #0000BB">1</span><span style="color: #007700">];<br /><br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$secondElement</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
   
   <blockquote class="note"><p><strong class="note">注意</strong>: 
    <p class="para">
      配列に定義されていないキーへアクセスしたときの挙動は、
      未定義の変数にアクセスしたときと同じです。
      つまり、<strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong> レベルの警告
      (PHP 8.0.0 より前のバージョンでは <strong><code><a href="errorfunc.constants.php#constant.e-notice">E_NOTICE</a></code></strong>)
      が発生し、結果が <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> になります。
    </p>
   </p></blockquote>
   <blockquote class="note"><p><strong class="note">注意</strong>: 
    <p class="para">
     配列で文字列以外のスカラー値をデリファレンスした場合は、
     返される結果は <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> となります。
     PHP 7.4.0 より前のバージョンでは、何もエラーは発生しませんでした。
     PHP 7.4.0 以降では、<strong><code><a href="errorfunc.constants.php#constant.e-notice">E_NOTICE</a></code></strong> が発生します。
     PHP 8.0.0 以降では、<strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong> が発生します。
    </p>
   </p></blockquote>
  </div>
  
  <div class="sect3" id="language.types.array.syntax.modifying">
   <h4 class="title">角括弧構文で作成/修正</h4>

   <p class="para">
    明示的に値を設定することにより、既存の配列を修正することも可能です。
   </p>

   <p class="para">
    これは、角括弧の中にキーを指定し、配列に値を代入することにより行います。
    キーを省略することも可能です。この場合、空の角括弧
    (&quot;<code class="literal">[]</code>&quot;) の変数名として追加してください。
   </p>
   
   <pre class="synopsis">
$arr[<span class="replaceable">key</span>] = <span class="replaceable">value</span>;
$arr[] = <span class="replaceable">value</span>;
// <span class="replaceable">key</span> は <span class="type"><a href="language.types.string.php" class="type string">string</a></span> または
// <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>のどちらかです。
// <span class="replaceable">value</span> の型は、何でもかまいません。
   </pre>
   
   <p class="para">
    <var class="varname">$arr</var> がまだ存在しない場合、
    あるいは <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> や <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> に設定されている場合は、
    新しく配列を作成します。
    つまり、これは配列を作成する方法のひとつでもあります。
    とはいえ、この方法を使うことはおすすめしません。なぜなら、既に
    <var class="varname">$arr</var> に何らかの値
    (リクエスト変数からの文字列など) が入っている場合にはその値がそのまま残り、
    <code class="literal">[]</code> が実際には
    <a href="language.types.string.php#language.types.string.substr" class="link">文字列アクセス演算子</a>
    を表してしまうからです。
    変数を初期化するときには、直接代入するほうがよいでしょう。
   </p>
   <blockquote class="note"><p><strong class="note">注意</strong>: 
    <span class="simpara">
     PHP 7.1.0 以降では、文字列に空のインデックス演算子を適用すると
     致命的なエラーが発生するようになりました。
     これまでのバージョンではエラーにならず、文字列が配列に変換されていました。
    </span>
   </p></blockquote>
   <blockquote class="note"><p><strong class="note">注意</strong>: 
    <span class="simpara">
     PHP 8.1.0 以降では、
     <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> に設定している値から新しく配列を作成することは推奨されません。
     <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> や未定義の値から配列を新しく作成することはまだ許可されています。
    </span>
   </p></blockquote>

   <p class="para">
    ある値を変更するには、
    新しい値に値を代入します。特定のキー/値の組を削除したい場合には、
    <span class="function"><a href="function.unset.php" class="function">unset()</a></span> を使用する必要があります。
   </p>

   <div class="example" id="example-10">
    <p><strong>例10 角括弧と配列の使用</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$arr </span><span style="color: #007700">= array(</span><span style="color: #0000BB">5 </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">1</span><span style="color: #007700">, </span><span style="color: #0000BB">12 </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">2</span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">$arr</span><span style="color: #007700">[] = </span><span style="color: #0000BB">56</span><span style="color: #007700">;    </span><span style="color: #FF8000">// このスクリプトのこの位置に記述した場合、<br />                // $arr[13] = 56; と同じです<br /><br /></span><span style="color: #0000BB">$arr</span><span style="color: #007700">[</span><span style="color: #DD0000">"x"</span><span style="color: #007700">] = </span><span style="color: #0000BB">42</span><span style="color: #007700">; </span><span style="color: #FF8000">// キー"x"の新しい要素を配列に追加します<br />                <br /></span><span style="color: #007700">unset(</span><span style="color: #0000BB">$arr</span><span style="color: #007700">[</span><span style="color: #0000BB">5</span><span style="color: #007700">]); </span><span style="color: #FF8000">// 配列から要素を削除します<br /><br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$arr</span><span style="color: #007700">);<br /><br />unset(</span><span style="color: #0000BB">$arr</span><span style="color: #007700">);    </span><span style="color: #FF8000">// 配列全体を削除します<br /><br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$arr</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div> 
    </div>

   </div>

   <blockquote class="note"><p><strong class="note">注意</strong>: 
    <p class="para">
     上記のように、キーを省略して新規要素を追加する場合、
     追加される数値添字は、使用されている添字の最大値 +1 (ただし、少なくとも 0 以上) になります。
     まだ数値添字が存在しない場合は、添字は <code class="literal">0</code>
     (ゼロ) となります。
    </p>

    <div class="warning"><strong class="warning">警告</strong>
     <p class="simpara">
      PHP 4.3.0 以降、上記のような添字生成動作は変更されました。
      現在では、配列に追加する際に、
      その配列の最大添字が負である場合は次の添字はゼロ
      (<code class="literal">0</code>) となります。
      以前は、正の添字の場合と同様に新しい添字は最大添字に +1
      したものがセットされました。
     </p>
    </div>

    <p class="para">
     次のキー生成において、オフセットとして使われる整数値
     (添字の最大値) に対応するエントリーが、
     必ずしも配列内に存在するわけではないことに注意してください。
     しかし、その値は、多くの場合、
     配列にある整数のキー値の最大値と等しいはずです。以下に例を示します。
    </p>

    <div class="informalexample">
     <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// 簡単な配列を生成します。<br /></span><span style="color: #0000BB">$array </span><span style="color: #007700">= array(</span><span style="color: #0000BB">1</span><span style="color: #007700">, </span><span style="color: #0000BB">2</span><span style="color: #007700">, </span><span style="color: #0000BB">3</span><span style="color: #007700">, </span><span style="color: #0000BB">4</span><span style="color: #007700">, </span><span style="color: #0000BB">5</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">$array</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// 全てのアイテムを削除しますが、配列自体は削除しないでおきます。<br /></span><span style="color: #007700">foreach (</span><span style="color: #0000BB">$array </span><span style="color: #007700">as </span><span style="color: #0000BB">$i </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">$value</span><span style="color: #007700">) {<br />    unset(</span><span style="color: #0000BB">$array</span><span style="color: #007700">[</span><span style="color: #0000BB">$i</span><span style="color: #007700">]);<br />}<br /></span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">$array</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// アイテムを追加します(新しい添え字は0ではなく<br />// 5となることに注意)<br /></span><span style="color: #0000BB">$array</span><span style="color: #007700">[] = </span><span style="color: #0000BB">6</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">$array</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// 添え字を振りなおします。<br /></span><span style="color: #0000BB">$array </span><span style="color: #007700">= </span><span style="color: #0000BB">array_values</span><span style="color: #007700">(</span><span style="color: #0000BB">$array</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$array</span><span style="color: #007700">[] = </span><span style="color: #0000BB">7</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">$array</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div> 
     </div>

     <p class="para">上の例の出力は以下となります。</p>
     <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
Array
(
    [0] =&gt; 1
    [1] =&gt; 2
    [2] =&gt; 3
    [3] =&gt; 4
    [4] =&gt; 5
)
Array
(
)
Array
(
    [5] =&gt; 6
)
Array
(
    [0] =&gt; 6
    [1] =&gt; 7
)
</pre></div>
     </div>
    </div>

   </p></blockquote>

  </div>

  <div class="sect3" id="language.types.array.syntax.destructuring">
   <h4 class="title">配列の分解</h4>

   <p class="para">
    配列は、言語構造 <code class="literal">[]</code> (PHP 7.1.0 以降)
    または、<span class="function"><a href="function.list.php" class="function">list()</a></span> を使って分解することができます。
    これらの言語構造は、
    配列を個別の値に分解する用途に使えます。
   </p>

   <div class="example" id="example-11">
    <p><strong>例11 配列の分解</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$source_array </span><span style="color: #007700">= [</span><span style="color: #DD0000">'foo'</span><span style="color: #007700">, </span><span style="color: #DD0000">'bar'</span><span style="color: #007700">, </span><span style="color: #DD0000">'baz'</span><span style="color: #007700">];<br /><br />[</span><span style="color: #0000BB">$foo</span><span style="color: #007700">, </span><span style="color: #0000BB">$bar</span><span style="color: #007700">, </span><span style="color: #0000BB">$baz</span><span style="color: #007700">] = </span><span style="color: #0000BB">$source_array</span><span style="color: #007700">;<br /><br />echo </span><span style="color: #0000BB">$foo</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;    </span><span style="color: #FF8000">// "foo" を出力します。<br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">$bar</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;    </span><span style="color: #FF8000">// "bar" を出力します。<br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">$baz</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;    </span><span style="color: #FF8000">// "baz" を出力します。<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

   <p class="para">
    これは、多次元配列を <a href="control-structures.foreach.php" class="link"><code class="literal">foreach</code></a> で反復処理しながら分解する用途に使えます。
   </p>

   <div class="example" id="example-12">
    <p><strong>例12 foreach での配列の分解</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$source_array </span><span style="color: #007700">= [<br />    [</span><span style="color: #0000BB">1</span><span style="color: #007700">, </span><span style="color: #DD0000">'John'</span><span style="color: #007700">],<br />    [</span><span style="color: #0000BB">2</span><span style="color: #007700">, </span><span style="color: #DD0000">'Jane'</span><span style="color: #007700">],<br />];<br /><br />foreach (</span><span style="color: #0000BB">$source_array </span><span style="color: #007700">as [</span><span style="color: #0000BB">$id</span><span style="color: #007700">, </span><span style="color: #0000BB">$name</span><span style="color: #007700">]) {<br />    echo </span><span style="color: #DD0000">"</span><span style="color: #007700">{</span><span style="color: #0000BB">$id</span><span style="color: #007700">}</span><span style="color: #DD0000">: '</span><span style="color: #007700">{</span><span style="color: #0000BB">$name</span><span style="color: #007700">}</span><span style="color: #DD0000">'\n"</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

   <p class="para">
    変数が与えられない配列の要素は無視されます。
    配列の分解は、常にインデックス <code class="literal">0</code> から始まります。
   </p>

   <div class="example" id="example-13">
    <p><strong>例13 要素を無視する</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$source_array </span><span style="color: #007700">= [</span><span style="color: #DD0000">'foo'</span><span style="color: #007700">, </span><span style="color: #DD0000">'bar'</span><span style="color: #007700">, </span><span style="color: #DD0000">'baz'</span><span style="color: #007700">];<br /><br /></span><span style="color: #FF8000">// インデックス2の要素を、変数 $baz に代入します<br /></span><span style="color: #007700">[, , </span><span style="color: #0000BB">$baz</span><span style="color: #007700">] = </span><span style="color: #0000BB">$source_array</span><span style="color: #007700">;<br /><br />echo </span><span style="color: #0000BB">$baz</span><span style="color: #007700">;    </span><span style="color: #FF8000">// "baz" を出力します。<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

   <p class="para">
    PHP 7.1.0 以降では、
    連想配列も分解できるようになりました。
    数値をキーとした配列の右側の要素を、
    インデックスを明示的に指定することで簡単に選択できるようになっています。
   </p>

   <div class="example" id="example-14">
    <p><strong>例14 連想配列の分解</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$source_array </span><span style="color: #007700">= [</span><span style="color: #DD0000">'foo' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">1</span><span style="color: #007700">, </span><span style="color: #DD0000">'bar' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">2</span><span style="color: #007700">, </span><span style="color: #DD0000">'baz' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">3</span><span style="color: #007700">];<br /><br /></span><span style="color: #FF8000">// インデックス 'baz' の要素を、変数 $three に代入します。<br /></span><span style="color: #007700">[</span><span style="color: #DD0000">'baz' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">$three</span><span style="color: #007700">] = </span><span style="color: #0000BB">$source_array</span><span style="color: #007700">;<br /><br />echo </span><span style="color: #0000BB">$three</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;  </span><span style="color: #FF8000">// 3 を出力します。<br /><br /></span><span style="color: #0000BB">$source_array </span><span style="color: #007700">= [</span><span style="color: #DD0000">'foo'</span><span style="color: #007700">, </span><span style="color: #DD0000">'bar'</span><span style="color: #007700">, </span><span style="color: #DD0000">'baz'</span><span style="color: #007700">];<br /><br /></span><span style="color: #FF8000">// インデックス 2 の要素を、変数 $baz に代入します。<br /></span><span style="color: #007700">[</span><span style="color: #0000BB">2 </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">$baz</span><span style="color: #007700">] = </span><span style="color: #0000BB">$source_array</span><span style="color: #007700">;<br /><br />echo </span><span style="color: #0000BB">$baz</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;    </span><span style="color: #FF8000">// "baz" を出力します。<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

   <p class="para">
    配列の分解を使うと、2つの変数を簡単に入れ替えることができます。
   </p>

   <div class="example" id="example-15">
    <p><strong>例15 2つの変数の入れ替え</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$a </span><span style="color: #007700">= </span><span style="color: #0000BB">1</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$b </span><span style="color: #007700">= </span><span style="color: #0000BB">2</span><span style="color: #007700">;<br /><br />[</span><span style="color: #0000BB">$b</span><span style="color: #007700">, </span><span style="color: #0000BB">$a</span><span style="color: #007700">] = [</span><span style="color: #0000BB">$a</span><span style="color: #007700">, </span><span style="color: #0000BB">$b</span><span style="color: #007700">];<br /><br />echo </span><span style="color: #0000BB">$a</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;    </span><span style="color: #FF8000">// 2 を出力します。<br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">$b</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;    </span><span style="color: #FF8000">// 1 を出力します。<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

   <blockquote class="note"><p><strong class="note">注意</strong>: 
    <p class="para">
     分解時に値を代入する際には、<code class="literal">...</code> 演算子はサポートされていません。
    </p>
   </p></blockquote>

   <blockquote class="note"><p><strong class="note">注意</strong>: 
    <p class="para">
     定義されていない配列のキーにアクセスしようとすると、
     未定義の変数にアクセスする場合と同じ扱いになります。
     つまり、<strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong> レベルの警告
     (PHP 8.0.0 より前のバージョンでは <strong><code><a href="errorfunc.constants.php#constant.e-notice">E_NOTICE</a></code></strong>)
     が発生し、結果が <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> になります。
    </p>
   </p></blockquote>
   <blockquote class="note"><p><strong class="note">注意</strong>: 
    <p class="para">
      スカラー値を分解すると、全ての変数に <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> が代入されます。
    </p>
   </p></blockquote>
  </div>

 </div>
 
 <div class="sect2" id="language.types.array.useful-funcs">
  <h3 class="title">有用な関数</h3>

  <p class="para">
   配列で使用する便利な関数がたくさんあります。
   <a href="ref.array.php" class="link">配列関数</a> の節を参照ください。
  </p>

  <blockquote class="note"><p><strong class="note">注意</strong>: 
   <p class="para">
    <span class="function"><a href="function.unset.php" class="function">unset()</a></span>関数は配列のキーを削除することが出来ます。
    ただし、これによってインデックスの再構築が行われるわけではないことに
    注意してください。
    &quot;通常の整数添字&quot; (0 から始まり、1 つずつ増加) のみを使用している場合、
    <span class="function"><a href="function.array-values.php" class="function">array_values()</a></span>
    を用いてインデックスを再構築することができます。
   </p>
   
   <div class="example" id="example-16">
    <p><strong>例16 中間にある要素を unset する</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$a </span><span style="color: #007700">= array(</span><span style="color: #0000BB">1 </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'one'</span><span style="color: #007700">, </span><span style="color: #0000BB">2 </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'two'</span><span style="color: #007700">, </span><span style="color: #0000BB">3 </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'three'</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">/* これにより配列は以下の様に定義されます。<br />   $a = array(1 =&gt; 'one', 3 =&gt; 'three');<br />   以下ではありません：<br />   $a = array(1 =&gt; 'one', 2 =&gt;'three');<br />*/<br /></span><span style="color: #007700">unset(</span><span style="color: #0000BB">$a</span><span style="color: #007700">[</span><span style="color: #0000BB">2</span><span style="color: #007700">]);<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$a</span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">$b </span><span style="color: #007700">= </span><span style="color: #0000BB">array_values</span><span style="color: #007700">(</span><span style="color: #0000BB">$a</span><span style="color: #007700">);<br /></span><span style="color: #FF8000">// $b は、array(0 =&gt; 'one', 1 =&gt;'three')となります<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$b</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </p></blockquote> 

  <p class="para">
   配列専用の制御構造として <a href="control-structures.foreach.php" class="link"><code class="literal">foreach</code></a> があります。
   この構造は、配列の要素に簡単に連続的にアクセスする手段を提供します。
  </p>
 </div>
 
 <div class="sect2" id="language.types.array.donts">
  <h3 class="title">配列ですべきこととしてはならないこと</h3>

  <div class="sect3" id="language.types.array.foo-bar">
   <h4 class="title">なぜ、<code class="literal">$foo[bar]</code> は使用できないのか?</h4>

   <p class="para">
    連想配列の添字の前後は常に引用符で括る必要があります。
    例えば、$foo[bar] ではなく $foo[&#039;bar&#039;] を使用してください。
    しかし、$foo[bar] はなぜ誤りなのでしょうか?
    古いスクリプトで次のような構文を見たことがあるかもしれません。
   </p>

   <div class="informalexample">
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$foo</span><span style="color: #007700">[</span><span style="color: #0000BB">bar</span><span style="color: #007700">] = </span><span style="color: #DD0000">'enemy'</span><span style="color: #007700">;<br />echo </span><span style="color: #0000BB">$foo</span><span style="color: #007700">[</span><span style="color: #0000BB">bar</span><span style="color: #007700">];<br /></span><span style="color: #FF8000">// etc<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
   
   <p class="para">
    これは間違っていますが、動作します。では、なぜ間違っているのでしょう?
    それは、このコードには文字列 (<code class="literal">&#039;bar&#039;</code> - 引用符で括られている) 
    ではなく未定義の定数 (<code class="literal">bar</code>) が使用されているためです。
    下位互換性の維持のため、未定義の定数は同じ名前の文字列に自動的に変換されます。
    そのため、このコードは動作します。
    例えば、<strong><code>bar</code></strong> という名前の定義されていない定数があるとすると、
    PHP は <code class="literal">&#039;bar&#039;</code> という文字列でそれを置換して使用します。
   </p>
   <div class="warning"><strong class="warning">警告</strong>
    <p class="simpara">
     生の文字列を未定義の定数として扱う振る舞いは、
     <strong><code><a href="errorfunc.constants.php#constant.e-notice">E_NOTICE</a></code></strong>
     レベルの警告が発生します。
     この振る舞いは PHP 7.2.0 以降は推奨されなくなり、
     <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong> レベルの警告が発生します。
     PHP 8.0.0 以降は、この振る舞いは削除され、
     <span class="classname"><a href="class.error.php" class="classname">Error</a></span> 例外がスローされるようになっています。
    </p>
   </div>

   <p class="simpara">
    これは、キーを <em>常に</em> クォートするという意味ではありません。
    <a href="language.constants.php" class="link">定数</a>や
    <a href="language.variables.php" class="link">変数</a>
    をキーとして使う際には、クォートしてしまうと PHP
    はそれを解釈できなくなってしまいます。
   </p>

   <div class="example" id="example-17">
    <p><strong>例17 キーのクォート</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />error_reporting</span><span style="color: #007700">(</span><span style="color: #0000BB">E_ALL</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">ini_set</span><span style="color: #007700">(</span><span style="color: #DD0000">'display_errors'</span><span style="color: #007700">, </span><span style="color: #0000BB">true</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">ini_set</span><span style="color: #007700">(</span><span style="color: #DD0000">'html_errors'</span><span style="color: #007700">, </span><span style="color: #0000BB">false</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// 単純な配列<br /></span><span style="color: #0000BB">$array </span><span style="color: #007700">= array(</span><span style="color: #0000BB">1</span><span style="color: #007700">, </span><span style="color: #0000BB">2</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$count </span><span style="color: #007700">= </span><span style="color: #0000BB">count</span><span style="color: #007700">(</span><span style="color: #0000BB">$array</span><span style="color: #007700">);<br /><br />for (</span><span style="color: #0000BB">$i </span><span style="color: #007700">= </span><span style="color: #0000BB">0</span><span style="color: #007700">; </span><span style="color: #0000BB">$i </span><span style="color: #007700">&lt; </span><span style="color: #0000BB">$count</span><span style="color: #007700">; </span><span style="color: #0000BB">$i</span><span style="color: #007700">++) {<br />    echo </span><span style="color: #DD0000">"\nChecking </span><span style="color: #0000BB">$i</span><span style="color: #DD0000">: \n"</span><span style="color: #007700">;<br />    echo </span><span style="color: #DD0000">"Bad: " </span><span style="color: #007700">. </span><span style="color: #0000BB">$array</span><span style="color: #007700">[</span><span style="color: #DD0000">'$i'</span><span style="color: #007700">] . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br />    echo </span><span style="color: #DD0000">"Good: " </span><span style="color: #007700">. </span><span style="color: #0000BB">$array</span><span style="color: #007700">[</span><span style="color: #0000BB">$i</span><span style="color: #007700">] . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br />    echo </span><span style="color: #DD0000">"Bad: </span><span style="color: #007700">{</span><span style="color: #0000BB">$array</span><span style="color: #007700">[</span><span style="color: #DD0000">'$i'</span><span style="color: #007700">]}</span><span style="color: #DD0000">\n"</span><span style="color: #007700">;<br />    echo </span><span style="color: #DD0000">"Good: </span><span style="color: #007700">{</span><span style="color: #0000BB">$array</span><span style="color: #007700">[</span><span style="color: #0000BB">$i</span><span style="color: #007700">]}</span><span style="color: #DD0000">\n"</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    <div class="example-contents"><p>上の例の出力は以下となります。</p></div>
    <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
Checking 0: 
Notice: Undefined index:  $i in /path/to/script.html on line 9
Bad: 
Good: 1
Notice: Undefined index:  $i in /path/to/script.html on line 11
Bad: 
Good: 1

Checking 1: 
Notice: Undefined index:  $i in /path/to/script.html on line 9
Bad: 
Good: 2
Notice: Undefined index:  $i in /path/to/script.html on line 11
Bad: 
Good: 2
</pre></div>        
    </div>
   </div>

   <p class="para">
    この具体例を以下に示します。
   </p>

   <div class="example" id="example-18">
    <p><strong>例18 その他の例</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// エラーを全て表示するよう設定<br /></span><span style="color: #0000BB">error_reporting</span><span style="color: #007700">(</span><span style="color: #0000BB">E_ALL</span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">$arr </span><span style="color: #007700">= array(</span><span style="color: #DD0000">'fruit' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'apple'</span><span style="color: #007700">, </span><span style="color: #DD0000">'veggie' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'carrot'</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// 正しい<br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">$arr</span><span style="color: #007700">[</span><span style="color: #DD0000">'fruit'</span><span style="color: #007700">], </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;  </span><span style="color: #FF8000">// apple<br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">$arr</span><span style="color: #007700">[</span><span style="color: #DD0000">'veggie'</span><span style="color: #007700">], </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">; </span><span style="color: #FF8000">// carrot<br /><br />// 間違い。未定義の定数fruitを使用しているため動作せず、<br />// PHP がエラーを発生させます。<br />//<br />// Error: Undefined constant "fruit"<br /></span><span style="color: #007700">try {<br />    echo </span><span style="color: #0000BB">$arr</span><span style="color: #007700">[</span><span style="color: #0000BB">fruit</span><span style="color: #007700">];<br />} catch (</span><span style="color: #0000BB">Error $e</span><span style="color: #007700">) {<br />    echo </span><span style="color: #0000BB">get_class</span><span style="color: #007700">(</span><span style="color: #0000BB">$e</span><span style="color: #007700">), </span><span style="color: #DD0000">': '</span><span style="color: #007700">, </span><span style="color: #0000BB">$e</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">getMessage</span><span style="color: #007700">(), </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #FF8000">// 検証のため、定数を定義してみましょう。<br />// fruitという名前の定数に値'veggie'を代入します。<br /></span><span style="color: #0000BB">define</span><span style="color: #007700">(</span><span style="color: #DD0000">'fruit'</span><span style="color: #007700">, </span><span style="color: #DD0000">'veggie'</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// ここでは、出力が異なることに注意してください。<br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">$arr</span><span style="color: #007700">[</span><span style="color: #DD0000">'fruit'</span><span style="color: #007700">], </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;  </span><span style="color: #FF8000">// apple<br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">$arr</span><span style="color: #007700">[</span><span style="color: #0000BB">fruit</span><span style="color: #007700">], </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;    </span><span style="color: #FF8000">// carrot<br /><br />// 以下は文字列の中であるためOKです。定数は、文字列の中では解釈されな<br />// いため、エラーはここでは発生しません。<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"Hello </span><span style="color: #0000BB">$arr</span><span style="color: #007700">[</span><span style="color: #0000BB">fruit</span><span style="color: #007700">]</span><span style="color: #DD0000">"</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;      </span><span style="color: #FF8000">// Hello apple<br /><br />// 例外が１つあり、文字列の中で波括弧で配列を括った場合には、<br />// 定数が解釈されます<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"Hello </span><span style="color: #007700">{</span><span style="color: #0000BB">$arr</span><span style="color: #007700">[</span><span style="color: #0000BB">fruit</span><span style="color: #007700">]}</span><span style="color: #DD0000">"</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;    </span><span style="color: #FF8000">// Hello carrot<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"Hello </span><span style="color: #007700">{</span><span style="color: #0000BB">$arr</span><span style="color: #007700">[</span><span style="color: #DD0000">'fruit'</span><span style="color: #007700">]}</span><span style="color: #DD0000">"</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;  </span><span style="color: #FF8000">// Hello apple<br /><br />// 文字列結合で同じことをすることもできます<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"Hello " </span><span style="color: #007700">. </span><span style="color: #0000BB">$arr</span><span style="color: #007700">[</span><span style="color: #DD0000">'fruit'</span><span style="color: #007700">], </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">; </span><span style="color: #FF8000">// Hello apple<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

   <div class="informalexample">
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// これは動作せず、以下のようなパースエラーを発生します:<br />// Parse error: parse error, expecting T_STRING' or T_VARIABLE' or T_NUM_STRING'<br />// 文字列の中でスーパーグローバルを使用した場合も無論同様です。<br /></span><span style="color: #007700">print </span><span style="color: #DD0000">"Hello </span><span style="color: #0000BB">$arr</span><span style="color: #007700">[</span><span style="color: #DD0000">'fruit']"</span><span style="color: #007700">;<br />print </span><span style="color: #DD0000">"Hello </span><span style="color: #0000BB">$_GET</span><span style="color: #007700">[</span><span style="color: #DD0000">'foo']"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

   <p class="para">
    <a href="language.types.array.php#language.types.array.syntax" class="link">構文</a> で説明した通り、角括弧
    (&#039;<code class="literal">[</code>&#039; および &#039;<code class="literal">]</code>&#039;)
    の間には、式がなければなりません。つまり、
    次のように書けるということです。
   </p>

   <div class="informalexample">
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">$arr</span><span style="color: #007700">[</span><span style="color: #0000BB">somefunc</span><span style="color: #007700">(</span><span style="color: #0000BB">$bar</span><span style="color: #007700">)];<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
   
   <p class="para">
    これは、関数の戻り値を配列の添字として使用する例です。PHP
    は定数についても認識します。以下のような <code class="literal">E_*</code>
    の使用例を見たことがあるかもしれません。
   </p>

   <div class="informalexample">
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$error_descriptions</span><span style="color: #007700">[</span><span style="color: #0000BB">E_ERROR</span><span style="color: #007700">]   = </span><span style="color: #DD0000">"A fatal error has occurred"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$error_descriptions</span><span style="color: #007700">[</span><span style="color: #0000BB">E_WARNING</span><span style="color: #007700">] = </span><span style="color: #DD0000">"PHP issued a warning"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$error_descriptions</span><span style="color: #007700">[</span><span style="color: #0000BB">E_NOTICE</span><span style="color: #007700">]  = </span><span style="color: #DD0000">"This is just an informal notice"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
   
   <p class="para">
    最初の例の <code class="literal">bar</code> と全く同様に
    <strong><code><a href="errorfunc.constants.php#constant.e-error">E_ERROR</a></code></strong> も有効な添字であることに注意してください。
    しかし、実際には最後の例は次のように書くことと同じです。
   </p>
  
   <div class="informalexample">
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$error_descriptions</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">] = </span><span style="color: #DD0000">"A fatal error has occurred"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$error_descriptions</span><span style="color: #007700">[</span><span style="color: #0000BB">2</span><span style="color: #007700">] = </span><span style="color: #DD0000">"PHP issued a warning"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$error_descriptions</span><span style="color: #007700">[</span><span style="color: #0000BB">8</span><span style="color: #007700">] = </span><span style="color: #DD0000">"This is just an informal notice"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
   
   <p class="para">
    これは、<strong><code><a href="errorfunc.constants.php#constant.e-error">E_ERROR</a></code></strong> が <code class="literal">1</code>
    と等しいこと等によります。
   </p>

   <div class="sect4" id="language.types.array.foo-bar.why">
    <h5 class="title">では、なぜ間違っているのでしょう?</h5>

    <p class="para">
     将来的に、PHP 開発チームが他の定数またはキーワードを追加したいと思うかもしれず、
     問題となる可能性があります。例えば、現在でも、
     単語 <code class="literal">empty</code> および
     <code class="literal">default</code>を使用することはできません。
     これは、これらが特別な
     <a href="reserved.php" class="link">予約済みのキーワード</a>であるためです。
    </p>

    <blockquote class="note"><p><strong class="note">注意</strong>: 
     <span class="simpara">
      二重引用符で括られた <span class="type"><a href="language.types.string.php" class="type string">string</a></span> の中では
      引用符で配列の添字を括らないことができ、このため、
      <code class="literal">&quot;$foo[bar]&quot;</code> は有効です。
      この理由の詳細については、上記の例や
      <a href="language.types.string.php#language.types.string.parsing" class="link"> 
      文字列中での変数のパース</a>を参照ください。
     </span>
    </p></blockquote>

   </div>
  </div>
 </div>

 <div class="sect2" id="language.types.array.casting">
  <h3 class="title">配列への変換</h3>
  
  <p class="para">
   <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>, <span class="type"><a href="language.types.float.php" class="type float">float</a></span>, <span class="type"><a href="language.types.string.php" class="type string">string</a></span>,
   <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span>, <span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span>のいずれの型においても、
   <span class="type"><a href="language.types.array.php" class="type array">array</a></span> に変換する場合、
   最初のスカラー値が割り当てられている一つの要素 (添字は 0) 
   を持つ配列を得ることになります。
   言い換えると、<code class="code">(array) $scalarValue</code>
   は、<code class="literal">array($scalarValue)</code> と全く同じです。
  </p>
  
  <p class="para">
   <span class="type"><a href="language.types.object.php" class="type object">object</a></span>を配列にする場合には、配列の要素として
   オブジェクトの属性 (メンバ変数) を持つ配列を得ることになります。
   添字はメンバ変数名となりますが、いくつか注意すべき例外があります。
   整数のプロパティはアクセス不能になります。
   private 変数の場合、変数名の頭にクラス名がつきます。また、
   protected 変数の場合は、変数名の頭に &#039;*&#039; がつきます。
   このとき、頭に追加される値の前後に <code class="literal">NUL</code> バイトがついてきます。
   未初期化の
   <a href="language.oop5.properties.php#language.oop5.properties.typed-properties" class="link">型付きプロパティ</a> は黙って捨てられます。
  </p>

  <div class="example" id="example-19">
   <p><strong>例19 配列への変換</strong></p>
   <div class="example-contents">
    <div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">class </span><span style="color: #0000BB">A </span><span style="color: #007700">{<br />    private </span><span style="color: #0000BB">$B</span><span style="color: #007700">;<br />    protected </span><span style="color: #0000BB">$C</span><span style="color: #007700">;<br />    public </span><span style="color: #0000BB">$D</span><span style="color: #007700">;<br />    function </span><span style="color: #0000BB">__construct</span><span style="color: #007700">()<br />    {<br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;{</span><span style="color: #0000BB">1</span><span style="color: #007700">} = </span><span style="color: #0000BB">null</span><span style="color: #007700">;<br />    }<br />}<br /></span><span style="color: #0000BB">var_export</span><span style="color: #007700">((array) new </span><span style="color: #0000BB">A</span><span style="color: #007700">());<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

   <div class="example-contents"><p>上の例の出力は以下となります。</p></div>
   <div class="example-contents screen">
    <div class="annotation-interactive cdata"><pre>
array (
  &#039;&#039; . &quot;\0&quot; . &#039;A&#039; . &quot;\0&quot; . &#039;B&#039; =&gt; NULL,
  &#039;&#039; . &quot;\0&quot; . &#039;*&#039; . &quot;\0&quot; . &#039;C&#039; =&gt; NULL,
  &#039;D&#039; =&gt; NULL,
  1 =&gt; NULL,
)
</pre></div>
   </div>
  </div>

  <p class="para">
   これらの <code class="literal">NUL</code> バイトは、以下のような予期せぬ振る舞いをすることがあります:
  </p>

  <div class="example" id="example-20">
   <p><strong>例20 オブジェクトを配列にキャストする</strong></p>
   <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">class </span><span style="color: #0000BB">A </span><span style="color: #007700">{<br />    private </span><span style="color: #0000BB">$A</span><span style="color: #007700">; </span><span style="color: #FF8000">// これは '\0A\0A' となります<br /></span><span style="color: #007700">}<br /><br />class </span><span style="color: #0000BB">B </span><span style="color: #007700">extends </span><span style="color: #0000BB">A </span><span style="color: #007700">{<br />    private </span><span style="color: #0000BB">$A</span><span style="color: #007700">; </span><span style="color: #FF8000">// これは '\0B\0A' となります<br />    </span><span style="color: #007700">public </span><span style="color: #0000BB">$AA</span><span style="color: #007700">; </span><span style="color: #FF8000">// これは 'AA' となります<br /></span><span style="color: #007700">}<br /><br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">((array) new </span><span style="color: #0000BB">B</span><span style="color: #007700">());<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

   <div class="example-contents"><p>上の例の出力は以下となります。</p></div>
   <div class="example-contents screen">
    <div class="annotation-interactive cdata"><pre>
array(3) {
  [&quot;BA&quot;]=&gt;
  NULL
  [&quot;AA&quot;]=&gt;
  NULL
  [&quot;AA&quot;]=&gt;
  NULL
}
</pre></div>
   </div>
  </div>

  <p class="para">
   上の例では &#039;AA&#039; というキーがふたつあるように見えますが、
   そのうちひとつは、実際は &#039;\0A\0A&#039; ということになります。
  </p>
  
  <p class="para">
   <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> を配列に変換すると、空の配列を得ます。
  </p>
 </div>

 <div class="sect2" id="language.types.array.comparing">
  <h3 class="title">比較</h3>

  <p class="para">
   <span class="function"><a href="function.array-diff.php" class="function">array_diff()</a></span> と
   <a href="language.operators.array.php" class="link">配列演算子</a>
   を用いると、配列を比較することができます。
  </p>
 </div>

 <div class="sect2" id="language.types.array.unpacking">
  <h3 class="title">配列のアンパック</h3>

  <p class="para">
   配列の前に <code class="code">...</code> を付けると、
   配列を定義する際に、その配列の値を展開(アンパック)させることができます。
   配列と、<span class="interfacename"><a href="class.traversable.php" class="interfacename">Traversable</a></span>
   を実装したオブジェクトを展開させることができます。
   <code class="code">...</code> を使った配列のアンパックは、
   PHP 7.4.0 以降で利用可能です。これは、スプレッド演算子とも呼ばれます。
  </p>

  <p class="para">
   配列のアンパックは、配列中で何度でも行うことができます。
   <code class="code">...</code> の前後に通常の要素を置くこともできます:

   <div class="example" id="example-21">
    <p><strong>例21 簡単な配列のアンパック</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// 配列の短縮構文を使っています。<br />// array() 記法も使えます。<br /></span><span style="color: #0000BB">$arr1 </span><span style="color: #007700">= [</span><span style="color: #0000BB">1</span><span style="color: #007700">, </span><span style="color: #0000BB">2</span><span style="color: #007700">, </span><span style="color: #0000BB">3</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">$arr2 </span><span style="color: #007700">= [...</span><span style="color: #0000BB">$arr1</span><span style="color: #007700">]; </span><span style="color: #FF8000">// [1, 2, 3]<br /></span><span style="color: #0000BB">$arr3 </span><span style="color: #007700">= [</span><span style="color: #0000BB">0</span><span style="color: #007700">, ...</span><span style="color: #0000BB">$arr1</span><span style="color: #007700">]; </span><span style="color: #FF8000">// [0, 1, 2, 3]<br /></span><span style="color: #0000BB">$arr4 </span><span style="color: #007700">= [...</span><span style="color: #0000BB">$arr1</span><span style="color: #007700">, ...</span><span style="color: #0000BB">$arr2</span><span style="color: #007700">, </span><span style="color: #0000BB">111</span><span style="color: #007700">]; </span><span style="color: #FF8000">// [1, 2, 3, 1, 2, 3, 111]<br /></span><span style="color: #0000BB">$arr5 </span><span style="color: #007700">= [...</span><span style="color: #0000BB">$arr1</span><span style="color: #007700">, ...</span><span style="color: #0000BB">$arr1</span><span style="color: #007700">]; </span><span style="color: #FF8000">// [1, 2, 3, 1, 2, 3]<br /><br /></span><span style="color: #007700">function </span><span style="color: #0000BB">getArr</span><span style="color: #007700">() {<br />  return [</span><span style="color: #DD0000">'a'</span><span style="color: #007700">, </span><span style="color: #DD0000">'b'</span><span style="color: #007700">];<br />}<br /></span><span style="color: #0000BB">$arr6 </span><span style="color: #007700">= [...</span><span style="color: #0000BB">getArr</span><span style="color: #007700">(), </span><span style="color: #DD0000">'c' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'d'</span><span style="color: #007700">]; </span><span style="color: #FF8000">// ['a', 'b', 'c' =&gt; 'd']<br /><br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$arr1</span><span style="color: #007700">, </span><span style="color: #0000BB">$arr2</span><span style="color: #007700">, </span><span style="color: #0000BB">$arr3</span><span style="color: #007700">, </span><span style="color: #0000BB">$arr4</span><span style="color: #007700">, </span><span style="color: #0000BB">$arr5</span><span style="color: #007700">, </span><span style="color: #0000BB">$arr6</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </p>

  <p class="para">
   <code class="code">...</code> を使ったアンパックの動作は、
   <span class="function"><a href="function.array-merge.php" class="function">array_merge()</a></span> 関数の仕様に従います。
   つまり、キーが文字列の場合は後に指定された値が前の値を上書きしますし、
   キーが整数の場合は、ゼロから値が振り直されます:

   <div class="example" id="example-22">
    <p><strong>例22 キーが重複した場合の配列のアンパック</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// キーが文字列の場合<br /></span><span style="color: #0000BB">$arr1 </span><span style="color: #007700">= [</span><span style="color: #DD0000">"a" </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">1</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">$arr2 </span><span style="color: #007700">= [</span><span style="color: #DD0000">"a" </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">2</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">$arr3 </span><span style="color: #007700">= [</span><span style="color: #DD0000">"a" </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">0</span><span style="color: #007700">, ...</span><span style="color: #0000BB">$arr1</span><span style="color: #007700">, ...</span><span style="color: #0000BB">$arr2</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$arr3</span><span style="color: #007700">); </span><span style="color: #FF8000">// ["a" =&gt; 2]<br /><br />// キーが整数の場合<br /></span><span style="color: #0000BB">$arr4 </span><span style="color: #007700">= [</span><span style="color: #0000BB">1</span><span style="color: #007700">, </span><span style="color: #0000BB">2</span><span style="color: #007700">, </span><span style="color: #0000BB">3</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">$arr5 </span><span style="color: #007700">= [</span><span style="color: #0000BB">4</span><span style="color: #007700">, </span><span style="color: #0000BB">5</span><span style="color: #007700">, </span><span style="color: #0000BB">6</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">$arr6 </span><span style="color: #007700">= [...</span><span style="color: #0000BB">$arr4</span><span style="color: #007700">, ...</span><span style="color: #0000BB">$arr5</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$arr6</span><span style="color: #007700">); </span><span style="color: #FF8000">// [1, 2, 3, 4, 5, 6]<br />// $arr6 は、 [0 =&gt; 1, 1 =&gt; 2, 2 =&gt; 3, 3 =&gt; 4, 4 =&gt; 5, 5 =&gt; 6] と同義です。<br />// ここでは、キーの値は保存されません。<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </p>

  <blockquote class="note"><p><strong class="note">注意</strong>: 
   <p class="para">
    キーが整数でも文字列でもない場合は、
    <span class="classname"><a href="class.typeerror.php" class="classname">TypeError</a></span> がスローされます。
    そのようなキーを持つ値は、
    <span class="interfacename"><a href="class.traversable.php" class="interfacename">Traversable</a></span>
    オブジェクト経由でしか生成できません。
   </p>
  </p></blockquote>
  <blockquote class="note"><p><strong class="note">注意</strong>: 
   <p class="para">
    PHP 8.1 より前のバージョンでは、
    キーが文字列の場合に、アンパックをサポートしていませんでした:
   </p>
   <div class="informalexample">
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br />$arr1 </span><span style="color: #007700">= [</span><span style="color: #0000BB">1</span><span style="color: #007700">, </span><span style="color: #0000BB">2</span><span style="color: #007700">, </span><span style="color: #0000BB">3</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">$arr2 </span><span style="color: #007700">= [</span><span style="color: #DD0000">'a' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">4</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">$arr3 </span><span style="color: #007700">= [...</span><span style="color: #0000BB">$arr1</span><span style="color: #007700">, ...</span><span style="color: #0000BB">$arr2</span><span style="color: #007700">];<br /></span><span style="color: #FF8000">// Fatal error: Uncaught Error: Cannot unpack array with string keys in example.php:5<br /><br /></span><span style="color: #0000BB">$arr4 </span><span style="color: #007700">= [</span><span style="color: #0000BB">1</span><span style="color: #007700">, </span><span style="color: #0000BB">2</span><span style="color: #007700">, </span><span style="color: #0000BB">3</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">$arr5 </span><span style="color: #007700">= [</span><span style="color: #0000BB">4</span><span style="color: #007700">, </span><span style="color: #0000BB">5</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">$arr6 </span><span style="color: #007700">= [...</span><span style="color: #0000BB">$arr4</span><span style="color: #007700">, ...</span><span style="color: #0000BB">$arr5</span><span style="color: #007700">]; </span><span style="color: #FF8000">// 動作します。 [1, 2, 3, 4, 5]<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </p></blockquote>

 </div>

 <div class="sect2" id="language.types.array.examples">
  <h3 class="title">例</h3>

  <p class="para">
   PHP の配列型は、いろいろな使い方ができます。配列の強力な機能を示すため、
   ここでいくつかの例を紹介します。
  </p>

  <div class="example" id="example-23">
   <p><strong>例23 多様な配列</strong></p>
   <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// これは、<br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= array( </span><span style="color: #DD0000">'color' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'red'</span><span style="color: #007700">,<br />            </span><span style="color: #DD0000">'taste' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'sweet'</span><span style="color: #007700">,<br />            </span><span style="color: #DD0000">'shape' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'round'</span><span style="color: #007700">,<br />            </span><span style="color: #DD0000">'name'  </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'apple'</span><span style="color: #007700">,<br />            </span><span style="color: #0000BB">4        </span><span style="color: #FF8000">// キーは0になります<br />          </span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">$b </span><span style="color: #007700">= array(</span><span style="color: #DD0000">'a'</span><span style="color: #007700">, </span><span style="color: #DD0000">'b'</span><span style="color: #007700">, </span><span style="color: #DD0000">'c'</span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$a</span><span style="color: #007700">, </span><span style="color: #0000BB">$b</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// 完全にこれと同じです。<br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= array();<br /></span><span style="color: #0000BB">$a</span><span style="color: #007700">[</span><span style="color: #DD0000">'color'</span><span style="color: #007700">] = </span><span style="color: #DD0000">'red'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$a</span><span style="color: #007700">[</span><span style="color: #DD0000">'taste'</span><span style="color: #007700">] = </span><span style="color: #DD0000">'sweet'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$a</span><span style="color: #007700">[</span><span style="color: #DD0000">'shape'</span><span style="color: #007700">] = </span><span style="color: #DD0000">'round'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$a</span><span style="color: #007700">[</span><span style="color: #DD0000">'name'</span><span style="color: #007700">]  = </span><span style="color: #DD0000">'apple'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$a</span><span style="color: #007700">[]        = </span><span style="color: #0000BB">4</span><span style="color: #007700">;        </span><span style="color: #FF8000">// キーは0になります<br /><br /></span><span style="color: #0000BB">$b </span><span style="color: #007700">= array();<br /></span><span style="color: #0000BB">$b</span><span style="color: #007700">[] = </span><span style="color: #DD0000">'a'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$b</span><span style="color: #007700">[] = </span><span style="color: #DD0000">'b'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$b</span><span style="color: #007700">[] = </span><span style="color: #DD0000">'c'</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// 上のコードを実行すると、$a は次のような配列<br />// array('color' =&gt; 'red', 'taste' =&gt; 'sweet', 'shape' =&gt; 'round', <br />// 'name' =&gt; 'apple', 0 =&gt; 4) となり、$b は<br />// array(0 =&gt; 'a', 1 =&gt; 'b', 2 =&gt; 'c') あるいは単に array('a', 'b', 'c') となります<br /><br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$a</span><span style="color: #007700">, </span><span style="color: #0000BB">$b</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>

  <div class="example" id="example-24">
   <p><strong>例24 array() の使用例</strong></p>
   <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// マップを行う配列<br /></span><span style="color: #0000BB">$map </span><span style="color: #007700">= array( </span><span style="color: #DD0000">'version'    </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">4</span><span style="color: #007700">,<br />              </span><span style="color: #DD0000">'OS'         </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'Linux'</span><span style="color: #007700">,<br />              </span><span style="color: #DD0000">'lang'       </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'english'</span><span style="color: #007700">,<br />              </span><span style="color: #DD0000">'short_tags' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">true<br />            </span><span style="color: #007700">);<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$map</span><span style="color: #007700">);<br />            <br /></span><span style="color: #FF8000">// 数値キーのみを有する<br />// これは、array(0 =&gt; 7, 1 =&gt; 8, ...) と同じです<br /></span><span style="color: #0000BB">$array </span><span style="color: #007700">= array( </span><span style="color: #0000BB">7</span><span style="color: #007700">,<br />                </span><span style="color: #0000BB">8</span><span style="color: #007700">,<br />                </span><span style="color: #0000BB">0</span><span style="color: #007700">,<br />                </span><span style="color: #0000BB">156</span><span style="color: #007700">,<br />                -</span><span style="color: #0000BB">10<br />              </span><span style="color: #007700">);<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$array</span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">$switching </span><span style="color: #007700">= array(         </span><span style="color: #0000BB">10</span><span style="color: #007700">, </span><span style="color: #FF8000">// key = 0<br />                    </span><span style="color: #0000BB">5    </span><span style="color: #007700">=&gt;  </span><span style="color: #0000BB">6</span><span style="color: #007700">,<br />                    </span><span style="color: #0000BB">3    </span><span style="color: #007700">=&gt;  </span><span style="color: #0000BB">7</span><span style="color: #007700">, <br />                    </span><span style="color: #DD0000">'a'  </span><span style="color: #007700">=&gt;  </span><span style="color: #0000BB">4</span><span style="color: #007700">,<br />                             </span><span style="color: #0000BB">11</span><span style="color: #007700">, </span><span style="color: #FF8000">// key = 6 (最大の添字は5です)<br />                    </span><span style="color: #DD0000">'8'  </span><span style="color: #007700">=&gt;  </span><span style="color: #0000BB">2</span><span style="color: #007700">, </span><span style="color: #FF8000">// key = 8 (整数!)<br />                    </span><span style="color: #DD0000">'02' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">77</span><span style="color: #007700">, </span><span style="color: #FF8000">// key = '02'<br />                    </span><span style="color: #0000BB">0    </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">12  </span><span style="color: #FF8000">// 値10は12で上書きされます<br />                  </span><span style="color: #007700">);<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$switching</span><span style="color: #007700">);<br />                  <br /></span><span style="color: #FF8000">// 空の配列<br /></span><span style="color: #0000BB">$empty </span><span style="color: #007700">= array();<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$empty</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>

   </div>

  </div>

  <div class="example" id="language.types.array.examples.loop">
   <p><strong>例25 コレクション</strong></p>
   <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$colors </span><span style="color: #007700">= array(</span><span style="color: #DD0000">'red'</span><span style="color: #007700">, </span><span style="color: #DD0000">'blue'</span><span style="color: #007700">, </span><span style="color: #DD0000">'green'</span><span style="color: #007700">, </span><span style="color: #DD0000">'yellow'</span><span style="color: #007700">);<br /><br />foreach (</span><span style="color: #0000BB">$colors </span><span style="color: #007700">as </span><span style="color: #0000BB">$color</span><span style="color: #007700">) {<br />    echo </span><span style="color: #DD0000">"Do you like </span><span style="color: #0000BB">$color</span><span style="color: #DD0000">?\n"</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

   <div class="example-contents"><p>上の例の出力は以下となります。</p></div>
   <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
Do you like red?
Do you like blue?
Do you like green?
Do you like yellow?
</pre></div>
   </div>
  </div>
  
  <p class="para">
   配列を参照渡しすることでその値を直接変更できます。
  </p>

  <div class="example" id="language.types.array.examples.changeloop">
   <p><strong>例26 ループ内での要素の変更</strong></p>
   <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$colors </span><span style="color: #007700">= array(</span><span style="color: #DD0000">'red'</span><span style="color: #007700">, </span><span style="color: #DD0000">'blue'</span><span style="color: #007700">, </span><span style="color: #DD0000">'green'</span><span style="color: #007700">, </span><span style="color: #DD0000">'yellow'</span><span style="color: #007700">);<br /><br />foreach (</span><span style="color: #0000BB">$colors </span><span style="color: #007700">as &amp;</span><span style="color: #0000BB">$color</span><span style="color: #007700">) {<br />    </span><span style="color: #0000BB">$color </span><span style="color: #007700">= </span><span style="color: #0000BB">mb_strtoupper</span><span style="color: #007700">(</span><span style="color: #0000BB">$color</span><span style="color: #007700">);<br />}<br />unset(</span><span style="color: #0000BB">$color</span><span style="color: #007700">); </span><span style="color: #FF8000">/* これ以降の $color への書き込みが<br />配列の要素を書き換えてしまわないことを保証する */<br /><br /></span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">$colors</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

   <div class="example-contents"><p>上の例の出力は以下となります。</p></div>
   <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
Array
(
    [0] =&gt; RED
    [1] =&gt; BLUE
    [2] =&gt; GREEN
    [3] =&gt; YELLOW
)
</pre></div>
   </div>
  </div>

  <p class="para">
   この例は、1 から始まる配列を作成します。
  </p>

  <div class="example" id="example-25">
   <p><strong>例27 1 から始まる添字</strong></p>
   <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$firstquarter </span><span style="color: #007700">= array(</span><span style="color: #0000BB">1 </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'January'</span><span style="color: #007700">, </span><span style="color: #DD0000">'February'</span><span style="color: #007700">, </span><span style="color: #DD0000">'March'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">$firstquarter</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

   <div class="example-contents"><p>上の例の出力は以下となります。</p></div>
   <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
Array 
(
    [1] =&gt; January
    [2] =&gt; February
    [3] =&gt; March
)
</pre></div>   
   </div>
  </div>

  <div class="example" id="example-26">
   <p><strong>例28 配列に代入する</strong></p>
   <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// ディレクトリから全てのアイテムを配列に代入する<br /></span><span style="color: #0000BB">$handle </span><span style="color: #007700">= </span><span style="color: #0000BB">opendir</span><span style="color: #007700">(</span><span style="color: #DD0000">'.'</span><span style="color: #007700">);<br />while (</span><span style="color: #0000BB">false </span><span style="color: #007700">!== (</span><span style="color: #0000BB">$file </span><span style="color: #007700">= </span><span style="color: #0000BB">readdir</span><span style="color: #007700">(</span><span style="color: #0000BB">$handle</span><span style="color: #007700">))) {<br />    </span><span style="color: #0000BB">$files</span><span style="color: #007700">[] = </span><span style="color: #0000BB">$file</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">closedir</span><span style="color: #007700">(</span><span style="color: #0000BB">$handle</span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$files</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>

  <p class="para">
   配列には順番が付けられます。異なったソート関数を用いて順番を変更することも可能です。
   より詳細な情報については、<a href="ref.array.php" class="link">配列関数</a> を参照ください。
   <span class="function"><a href="function.count.php" class="function">count()</a></span> 関数を使用することで、
   配列の要素数を数えることが可能です。
  </p>

  <div class="example" id="example-27">
   <p><strong>例29 配列のソート</strong></p>
   <div class="example-contents">
<div class="annotation-non-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />sort</span><span style="color: #007700">(</span><span style="color: #0000BB">$files</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">$files</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>

  <p class="para">
   配列の値は何でも良いため、その値を他の配列とすることも可能です。
   これにより、再帰的な配列や多次元の配列を作成することが可能です。
  </p>

  <div class="example" id="example-28">
   <p><strong>例30 再帰および多次元配列</strong></p>
   <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$fruits </span><span style="color: #007700">= array (<br />    </span><span style="color: #DD0000">"fruits"  </span><span style="color: #007700">=&gt; array (<br />        </span><span style="color: #DD0000">"a" </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">"orange"</span><span style="color: #007700">,<br />        </span><span style="color: #DD0000">"b" </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">"banana"</span><span style="color: #007700">,<br />        </span><span style="color: #DD0000">"c" </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">"apple"<br />    </span><span style="color: #007700">),<br />    </span><span style="color: #DD0000">"numbers" </span><span style="color: #007700">=&gt; array (<br />        </span><span style="color: #0000BB">1</span><span style="color: #007700">,<br />        </span><span style="color: #0000BB">2</span><span style="color: #007700">,<br />        </span><span style="color: #0000BB">3</span><span style="color: #007700">,<br />        </span><span style="color: #0000BB">4</span><span style="color: #007700">,<br />        </span><span style="color: #0000BB">5</span><span style="color: #007700">,<br />        </span><span style="color: #0000BB">6<br />    </span><span style="color: #007700">),<br />    </span><span style="color: #DD0000">"holes"   </span><span style="color: #007700">=&gt; array (<br />        </span><span style="color: #DD0000">"first"</span><span style="color: #007700">,<br />        </span><span style="color: #0000BB">5 </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">"second"</span><span style="color: #007700">,<br />             </span><span style="color: #DD0000">"third"<br />    </span><span style="color: #007700">)<br />);<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$fruits</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// 上の配列の内容を取得するための例<br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">$fruits</span><span style="color: #007700">[</span><span style="color: #DD0000">"holes"</span><span style="color: #007700">][</span><span style="color: #0000BB">5</span><span style="color: #007700">];    </span><span style="color: #FF8000">// "second" を表示します<br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">$fruits</span><span style="color: #007700">[</span><span style="color: #DD0000">"fruits"</span><span style="color: #007700">][</span><span style="color: #DD0000">"a"</span><span style="color: #007700">]; </span><span style="color: #FF8000">// "orange" を表示します<br /></span><span style="color: #007700">unset(</span><span style="color: #0000BB">$fruits</span><span style="color: #007700">[</span><span style="color: #DD0000">"holes"</span><span style="color: #007700">][</span><span style="color: #0000BB">0</span><span style="color: #007700">]);  </span><span style="color: #FF8000">// "first"  を削除します<br /><br />// 新しい多次元配列を作成します<br /></span><span style="color: #0000BB">$juices</span><span style="color: #007700">[</span><span style="color: #DD0000">"apple"</span><span style="color: #007700">][</span><span style="color: #DD0000">"green"</span><span style="color: #007700">] = </span><span style="color: #DD0000">"good"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$juices</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>

  <p class="para">
   配列への代入においては、常に値がコピーされることに注意してください。
   配列をリファレンスでコピーする場合には、
   リファレンス演算子を使う必要があります。
  </p>

  <div class="example" id="example-29">
   <p><strong>例31 配列のコピー</strong></p>
   <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$arr1 </span><span style="color: #007700">= array(</span><span style="color: #0000BB">2</span><span style="color: #007700">, </span><span style="color: #0000BB">3</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$arr2 </span><span style="color: #007700">= </span><span style="color: #0000BB">$arr1</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$arr2</span><span style="color: #007700">[] = </span><span style="color: #0000BB">4</span><span style="color: #007700">; </span><span style="color: #FF8000">// $arr2 が変更されます。<br />             // $arr1 は array(2,3) のままです。<br />             <br /></span><span style="color: #0000BB">$arr3 </span><span style="color: #007700">= &amp;</span><span style="color: #0000BB">$arr1</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$arr3</span><span style="color: #007700">[] = </span><span style="color: #0000BB">4</span><span style="color: #007700">; </span><span style="color: #FF8000">// $arr1 と $arr3 は同じ内容になります。<br /><br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$arr1</span><span style="color: #007700">, </span><span style="color: #0000BB">$arr2</span><span style="color: #007700">, </span><span style="color: #0000BB">$arr3</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>

 </div>
</div><?php manual_footer($setup); ?>