<?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 => 'zh',
  ),
  'this' => 
  array (
    0 => 'language.types.array.php',
    1 => 'Array 数组',
    2 => 'Array 数组',
  ),
  'up' => 
  array (
    0 => 'language.types.php',
    1 => '类型',
  ),
  'prev' => 
  array (
    0 => 'language.types.numeric-strings.php',
    1 => '数字字符串',
  ),
  'next' => 
  array (
    0 => 'language.types.object.php',
    1 => 'Object 对象',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'zh',
    '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">Array 数组</h2>

 <p class="para">
  有关数组操作的更多信息，请参阅 <a href="ref.array.php" class="link">数组函数</a> 章节的文档。
 </p>

 <p class="para">
  PHP 中的 <span class="type"><a href="language.types.array.php" class="type array">array</a></span> 实际上是一个有序映射。映射是一种把
  <em>values</em> 关联到 <em>keys</em> 的类型。此类型针对多种不同用途进行了优化；
  它可以被视为数组、列表（向量）、哈希表（映射的实现）、字典、集合、堆栈、队列等等。
  由于 <span class="type"><a href="language.types.array.php" class="type array">array</a></span> 的值可以是其它 <span class="type"><a href="language.types.array.php" class="type array">array</a></span>
  所以树形结构和多维 <span class="type"><a href="language.types.array.php" class="type array">array</a></span> 也是允许的。
 </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="function"><a href="function.array.php" class="function">array()</a></span> 语言结构来新建一个 <span class="type"><a href="language.types.array.php" class="type array">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">[]</code> 替代 <code class="literal">array()</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">
    <span class="replaceable">key</span> 可以是 <span class="type"><a href="language.types.integer.php" class="type integer">integer</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">
       <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>，除非数字前面有一个 <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> 也会被转换为 <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 数组可以同时含有 <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> 类型的键名，因为
    PHP 实际并不区分索引数组和关联数组。
   </p>

   <div class="example" id="example-3">
    <p><strong>示例 #3 混合 <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> 键名</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
    将自动使用之前用过的最大 <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> 键名加上 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>
     当分配负整数 key <code class="literal">n</code> 时，PHP 会将下一个 key 分配给 <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 之前，分配负整数 key <code class="literal">n</code> 会将下一个 key 分配给
      <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">
     数组解引用非 <span class="type"><a href="language.types.string.php" class="type string">string</a></span> 的标量值会产生 <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">
    可以通过明示地设定其中的值来修改现有的 <span class="type"><a href="language.types.array.php" class="type array">array</a></span> 。
   </p>

   <p class="para">
    这是通过在方括号内指定键名来给 <span class="type"><a href="language.types.array.php" class="type array">array</a></span>
    赋值实现的。也可以省略键名，在这种情况下给变量名加上一对空的方括号（<code class="literal">[]</code>）。
   </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.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> 可以是任意类型的值</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>，将会新建它，这也是另一种创建
    <span class="type"><a href="language.types.array.php" class="type array">array</a></span> 的方法。不过并不鼓励这样做，因为如果
    <var class="varname">$arr</var> 已经包含有值（例如来自请求变量的 <span class="type"><a href="language.types.string.php" class="type string">string</a></span>）则此值会保留而
    <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 Using Square Brackets with Arrays</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">// 这与 $arr[13] = 56 相同;<br />                // 在脚本的这一点上<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">// 添加一个新元素<br />                // 键名使用 "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: #007700">unset(</span><span style="color: #0000BB">$arr</span><span style="color: #007700">);    </span><span style="color: #FF8000">// 删除整个数组<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

   <blockquote class="note"><p><strong class="note">注意</strong>: 
    <p class="para">
     如上所述，如果给出方括号但没有指定键名，则取当前最大
     <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> 索引值，新的键名将是该值加上
     1（但是最小为 0）。如果当前还没有 <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> 索引，则键名将为
     <code class="literal">0</code> 。
    </p>

    <p class="para">
     注意这里所使用的最大整数键名<em>目前不需要存在于 <span class="type"><a href="language.types.array.php" class="type array">array</a></span>
     中</em>。 它只要在上次 <span class="type"><a href="language.types.array.php" class="type array">array</a></span> 重新生成索引后曾经存在于
     <span class="type"><a href="language.types.array.php" class="type array">array</a></span> 就行了。以下面的例子来说明：
    </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">// 添加一个单元（注意新的键名是 5，而不是你可能以为的 0）<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 Array Destructuring</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 Array Destructuring in 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 Ignoring Elements</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 Destructuring Associative Arrays</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">
    数组解包可以方便的用于两个变量交换。
   </p>

   <div class="example" id="example-15">
    <p><strong>示例 #15 Swapping Two Variable</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> 函数允许删除
    <span class="type"><a href="language.types.array.php" class="type array">array</a></span> 中的某个键。但要注意数组将<em>不会</em>重建索引。如果需要删除后重建索引，可以用
    <span class="function"><a href="function.array-values.php" class="function">array_values()</a></span> 函数重建 <span class="type"><a href="language.types.array.php" class="type array">array</a></span> 索引。
   </p>

   <div class="example" id="example-16">
    <p><strong>示例 #16 Unsetting Intermediate Elements</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">// Now $b is 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> 控制结构是专门用于
   <span class="type"><a href="language.types.array.php" class="type array">array</a></span> 的。它提供了一个简单的方法来遍历 <span class="type"><a href="language.types.array.php" class="type array">array</a></span>。
  </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">
     应该始终在用字符串表示的数组索引上加上引号。例如用
    <code class="literal">$foo[&#039;bar&#039;]</code> 而不是
    <code class="literal">$foo[bar]</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 />$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">// 及其它<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

   <p class="para">
    这样是错的，但可以正常运行。那么为什么错了呢？原因是此代码中有一个未定义的常量（
    <code class="literal">bar</code> ）而不是 <span class="type"><a href="language.types.string.php" class="type string">string</a></span>（<code class="literal">&#039;bar&#039;</code>－注意引号）。而
    PHP 可能会在以后定义此常量，不幸的是你的代码中有同样的名字。它能运行，是因为
    PHP 自动将<em>裸字符串</em>（没有引号的 <span class="type"><a href="language.types.string.php" class="type string">string</a></span>
    且不对应于任何已知符号）转换成一个其值为该裸 <span class="type"><a href="language.types.string.php" class="type string">string</a></span> 的
    <span class="type"><a href="language.types.string.php" class="type string">string</a></span>。例如，如果没有常量定义为
    <strong><code>bar</code></strong>，那么PHP 将在
    <span class="type"><a href="language.types.string.php" class="type string">string</a></span> 中替代为 <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 Key Quoting</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">"\n检查 </span><span style="color: #0000BB">$i</span><span style="color: #DD0000">: \n"</span><span style="color: #007700">;<br />    echo </span><span style="color: #DD0000">"坏的: " </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">"好的: " </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">"坏的: </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">"好的: </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>
    <p class="para">以上示例会输出：</p>
    <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
检查 0:
Notice: Undefined index:  $i in /path/to/script.html on line 9
坏的:
好的: 1
Notice: Undefined index:  $i in /path/to/script.html on line 11
坏的:
好的: 1

检查 1:
Notice: Undefined index:  $i in /path/to/script.html on line 9
坏的:
好的: 2
Notice: Undefined index:  $i in /path/to/script.html on line 11
坏的:
好的: 2
</pre></div>
   </div>

   <p class="para">
    演示此行为的更多例子：
   </p>

   <div class="example" id="example-18">
    <p><strong>示例 #18 More Examples</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 的常量而抛出 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">// 此处定义了一个常量以说明其行为，将值 'veggie' 赋予名为 fruit 的常量<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 />// 以下写法是允许的，因为其位于字符串内部。常量在字符串中不会被查找，因此此处不会产生错误<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 /></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">// 这将不起作用，并会导致解析错误，例如：<br />// Parse error: parse error, expecting T_STRING' or T_VARIABLE' or T_NUM_STRING'<br />// 这当然也适用于在字符串中使用超全局变量<br />print "Hello $arr['fruit']";<br />print "Hello $_GET['foo']";<br />?&gt;</span></code></div>
    </div>

   </div>

   <p class="para">
    和在 <a href="language.types.array.php#language.types.array.syntax" class="link">语法</a>
    一节中规定的一样，在方括号（<code class="literal">[</code>” 和
    “<code class="literal">]</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 /></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 也可以用已知常量，可能之前已经见过：
   </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">E_ERROR</code> 也是个合法的标识符，就和第一个例子中的
    <code class="literal">bar</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">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">
    因为 <code class="literal">E_ERROR</code> 等于 <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">
      重申一次，在双引号字符串中，不给索引加上引号是合法的因此
      <code class="literal">&quot;$foo[bar]&quot;</code>
      是合法的（“合法”的原文为 valid。在实际测试中，这么做确实可以访问数组的该元素，但是会报一个常量未定义的
      notice。无论如何，强烈建议不要使用 $foo[bar]这样的写法，而要使用 $foo[&#039;bar&#039;]
      来访问数组中元素。--haohappy 注）。至于为什么参见以上的例子和
      <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> 类型转换为
   <span class="type"><a href="language.types.array.php" class="type array">array</a></span>，则结果为一个数组，其单元为该对象的属性。键名将为成员变量名，不过有几点例外：整数属性不可访问；
   私有变量前会加上类名作前缀；保护变量前会加上一个 &#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 /><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 Casting an Object to an Array</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> 转换为 <span class="type"><a href="language.types.array.php" class="type array">array</a></span> 会得到一个空的数组。
  </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">
   在 array 定义时，用 <code class="code">...</code> 前缀的一个 array 可以被展开到当前位置。
   只有实现了 <span class="interfacename"><a href="class.traversable.php" class="interfacename">Traversable</a></span> 的数组和对象才能被展开。
   PHP 7.4.0 开始可以使用 <code class="code">...</code> 解包 array。这也被称之为展开运算符。
  </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> 操作符解包 array 时也遵守函数 <span class="function"><a href="function.array-merge.php" class="function">array_merge()</a></span> 的语义。
   也就是说，key 为字符时，后面的字符键会覆盖之前的字符键；key 为 integer 时则会重新编号：

   <div class="example" id="example-22">
    <p><strong>示例 #22 重复 key 的数组解包</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">// string key<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 />// integer key<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 />// 即 [0 =&gt; 1, 1 =&gt; 2, 2 =&gt; 3, 3 =&gt; 4, 4 =&gt; 5, 5 =&gt; 6]<br />// 也就是原始的 integer key 不再保留<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">
    既不是 integer 也不是 string 的 key 会抛出 <span class="classname"><a href="class.typeerror.php" class="classname">TypeError</a></span>。
    这类 key 只能通过 <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 之前，带有 string 键的 array 无法解包：
   </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">// works. [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 Array Versatility</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 /></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">// Array as (property-)map<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">// strictly numerical keys<br />// this is the same as 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">
   可以通过引用传递 <span class="type"><a href="language.types.array.php" class="type array">array</a></span> 的值来直接更改数组的值。
  </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">/* 确保后面对<br />$color 的写入不会修改最后一个数组元素 */<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">
   <span class="type"><a href="language.types.array.php" class="type Array">Array</a></span> 是有序的。也可以使用不同的排序函数来改变顺序。更多信息参见
   <a href="ref.array.php" class="link">数组函数</a>。可以用
   <span class="function"><a href="function.count.php" class="function">count()</a></span> 函数来统计出
   <span class="type"><a href="language.types.array.php" class="type array">array</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">
   因为 <span class="type"><a href="language.types.array.php" class="type array">array</a></span> 中的值可以为任意值，也可是另一个
   <span class="type"><a href="language.types.array.php" class="type array">array</a></span>。这样可以产生递归或多维 <span class="type"><a href="language.types.array.php" class="type array">array</a></span>。
  </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 ( </span><span style="color: #DD0000">"fruits"  </span><span style="color: #007700">=&gt; array ( </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 ( </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 (      </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">
   <span class="type"><a href="language.types.array.php" class="type Array">Array</a></span> 的赋值总是会涉及到值的拷贝。使用
   <a href="language.operators.php" class="link">引用运算符</a> 通过引用来拷贝
   <span class="type"><a href="language.types.array.php" class="type array">array</a></span>。
  </p>

  <div class="example" id="example-29">
   <p><strong>示例 #31 Array Copying</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); ?>