<?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 => 'ru',
  ),
  'this' => 
  array (
    0 => 'language.types.array.php',
    1 => 'Массивы',
    2 => 'Массивы',
  ),
  'up' => 
  array (
    0 => 'language.types.php',
    1 => 'Типы',
  ),
  'prev' => 
  array (
    0 => 'language.types.numeric-strings.php',
    1 => 'Числовые строки',
  ),
  'next' => 
  array (
    0 => 'language.types.object.php',
    1 => 'Объекты',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'ru',
    'path' => 'language/types/array.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="language.types.array" class="sect1">
 <h2 class="title">Массивы</h2>

 <p class="para">
  Список функций для работы с массивами доступен в главе документации «<a href="ref.array.php" class="link">Функции для работы с массивами</a>».
 </p>

 <p class="para">
  Массив в PHP — упорядоченная структура данных, которая связывает
  <em>значения</em> и <em>ключи</em>.
  Этот тип данных оптимизирован для разных целей, поэтому с ним работают
  как с массивом, списком (вектором), хеш-таблицей (реализацией карты), словарём,
  коллекцией, стеком, очередью и, возможно, чем-то ещё. Поскольку значениями массива бывают
  другие массивы, также доступны деревья и многомерные массивы.
 </p>

 <p class="para">
  Объяснение структур данных выходит за рамки
  руководства, но как минимум один пример приводится
  для каждой из них. За дополнительной информацией обращаются
  к большому объему литературы по этой обширной теме.
 </p>

 <div class="sect2" id="language.types.array.syntax">
  <h3 class="title">Синтаксис</h3>

  <div class="sect3" id="language.types.array.syntax.array-func">
   <h4 class="title">Определение массива через языковую конструкцию <span class="function"><a href="function.array.php" class="function">array()</a></span></h4>

   <p class="para">
    Массив (<span class="type"><a href="language.types.array.php" class="type array">array</a></span>) создают языковой конструкцией <span class="function"><a href="function.array.php" class="function">array()</a></span>.
    Конструкция принимает как аргументы произвольное количество разделённых запятыми пар
    <code class="literal"><span class="replaceable">ключ</span> =&gt; <span class="replaceable">значение</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">
     PHP поддерживает короткий синтаксис массива, который заменяет
     языковую конструкцию <code class="literal">array()</code> выражением <code class="literal">[]</code>.
    </p>
   </p></blockquote>

   <div class="example" id="example-1">
    <p><strong>Пример #1 Простой массив</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><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">);</span></span></code></div>
    </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>) <span class="replaceable">ключи</span>.
    Тип <span class="replaceable">значений</span> не ограничивается.
   </p>

   <p class="para" id="language.types.array.key-casts">
    Дополнительно выполняются следующие преобразования <span class="replaceable">ключа</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>),
       преобразуются в значение <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>,
       если только перед числом не указали знак <code class="literal">+</code>.
       Например, ключ со значением <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">
    PHP перезаписывает значение элемента, если встречает в объявлении массива
    повтор одного и того же ключа, поэтому в массиве остается только последний такой элемент.
   </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 /><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 /><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></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 /><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">);</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">Ключ</span> необязателен: ключом нового элемента, для которого не указали ключ,
    станет увеличенный на единицу предыдущий наибольший целочисленный (<span class="type"><a href="language.types.integer.php" class="type int">int</a></span>) ключ.
   </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 /><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">"hallo"</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">);</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;hallo&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 /><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">);</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 /><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">// Значение "b" перезапишет значение "a"<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">// Значение "c" перезапишет значение "b"<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">// Значение "g" перезапишет значение "c"<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">// Значение "j" перезапишет значение "i"<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">// Значение "l" перезапишет значение "k"<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">);</span></span></code></div>
    </div>

    
<div class="example-contents"><p>
 Результат выполнения приведённого примера:
</p></div>

    <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
array(7) {
  [1]=&gt;
  string(1) &quot;g&quot;
  [-1]=&gt;
  string(1) &quot;d&quot;
  [&quot;01&quot;]=&gt;
  string(1) &quot;e&quot;
  [&quot;1.5&quot;]=&gt;
  string(1) &quot;f&quot;
  [0]=&gt;
  string(1) &quot;h&quot;
  [&quot;&quot;]=&gt;
  string(1) &quot;j&quot;
  [2]=&gt;
  string(1) &quot;l&quot;
}
</pre></div>
    </div>
   </div>

   <div class="example" id="example-7">
    <p><strong>Пример #7 Отрицательные индексы</strong></p>
    <div class="example-contents"><p>
     При назначении отрицательного целочисленного ключа <code class="literal">n</code>,
     PHP позаботится о том, чтобы назначить следующий ключ <code class="literal">n + 1</code>.
    </p></div>
    <div class="example-contents">
     <div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><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">);</span></span></code></div>
    </div>

    
<div class="example-contents"><p>
 Результат выполнения приведённого примера:
</p></div>

    <div class="example-contents screen">
     <div class="annotation-interactive cdata"><pre>
array(2) {
  [-5]=&gt;
  int(1)
  [-4]=&gt;
  int(2)
}
</pre></div>
    </div>

    <div class="warning"><strong class="warning">Внимание</strong>
     <p class="simpara">
      До PHP 8.3.0 назначение отрицательного целочисленного ключа <code class="literal">n</code>
      присвоило бы следующему ключу значение <code class="literal">0</code>, поэтому приведённый пример
      вывел бы:
     </p>
     <div class="informalexample">
      <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
array(2) {
  [-5]=&gt;
  int(1)
  [0]=&gt;
  int(2)
}
</pre></div>
      </div>
     </div>
    </div>
   </div>
  </div>

  <div class="sect3" id="language.types.array.syntax.accessing">
   <h4 class="title">Доступ к элементам массива через синтаксис квадратных скобок</h4>

   <p class="para">
    Доступ к элементам массива получают синтаксисом <code class="literal">array[key]</code>.
   </p>

   <div class="example" id="example-8">
    <p><strong>Пример #8 Доступ к элементам массива</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><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">]);</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 /><br /></span><span style="color: #007700">function </span><span style="color: #0000BB">getArray</span><span style="color: #007700">()<br />{<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">);</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>,
     тогда как разыменование значения <span class="type"><a href="language.types.string.php" class="type string">string</a></span> трактует строку как индексный массив.
     При такой попытке до PHP 7.4.0 не выдавалось сообщение об ошибке.
     С PHP 7.4.0 выдаётся ошибка уровня <strong><code><a href="errorfunc.constants.php#constant.e-notice">E_NOTICE</a></code></strong>;
     с PHP 8.0.0 выдаётся ошибка уровня <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong>.
    </p>
   </p></blockquote>
  </div>

  <div class="sect3" id="language.types.array.syntax.modifying">
   <h4 class="title">Создание или модификация массива синтаксисом квадратных скобок</h4>

   <p class="para">
    Массив возможно изменить путём явной установки значений.
   </p>

   <p class="para">
    Присваивание через ключ в квадратных скобках установит значение массива (<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">
    PHP создаст новый массив, если переменную <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 Работа с массивами через квадратные скобки</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br />$arr </span><span style="color: #007700">= array(</span><span style="color: #0000BB">5 </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">1</span><span style="color: #007700">, </span><span style="color: #0000BB">12 </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">2</span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">$arr</span><span style="color: #007700">[] = </span><span style="color: #0000BB">56</span><span style="color: #007700">;    </span><span style="color: #FF8000">// В этом месте скрипта такое аналогично<br />                // присваиванию $arr[13] = 56;<br /><br /></span><span style="color: #0000BB">$arr</span><span style="color: #007700">[</span><span style="color: #DD0000">"x"</span><span style="color: #007700">] = </span><span style="color: #0000BB">42</span><span style="color: #007700">; </span><span style="color: #FF8000">// Добавление в массив нового<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: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$arr</span><span style="color: #007700">);<br /><br />unset(</span><span style="color: #0000BB">$arr</span><span style="color: #007700">);    </span><span style="color: #FF8000">// Конструкция удаляет весь массив<br /><br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$arr</span><span style="color: #007700">);</span></span></code></div>
    </div>

   </div>

   <blockquote class="note"><p><strong class="note">Замечание</strong>: 
    <p class="para">
     Как уже отмечалось, при добавлении в массив нового значения без указания ключа PHP присвоит новому элементу
     целочисленный ключ на 1 больше текущего наибольшего целочисленного (<span class="type"><a href="language.types.integer.php" class="type int">int</a></span>) индекса,
     но не меньше 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>не обязательно содержится в массиве в текущий момент</em>.
     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 /><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">);</span></span></code></div>
     </div>

     
<p class="para">
 Результат выполнения приведённого примера:
</p>

     <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
Array
(
    [0] =&gt; 1
    [1] =&gt; 2
    [2] =&gt; 3
    [3] =&gt; 4
    [4] =&gt; 5
)
Array
(
)
Array
(
    [5] =&gt; 6
)
Array
(
    [0] =&gt; 6
    [1] =&gt; 7
)
</pre></div>
     </div>
    </div>
   </p></blockquote>
  </div>

  <div class="sect3" id="language.types.array.syntax.destructuring">
   <h4 class="title">Деструктуризация массива</h4>

   <p class="para">
    Массивы деструктурируют языковыми конструкциями <code class="literal">[]</code> (начиная с PHP 7.1.0)
    или <span class="function"><a href="function.list.php" class="function">list()</a></span>. Эти языковые конструкции разрешено использовать
    для деструктуризации массива на отдельные переменные.
   </p>

   <div class="example" id="example-11">
    <p><strong>Пример #11 Деструктуризация массива</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><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 />[</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 />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"</span></span></code></div>
    </div>

   </div>

   <p class="para">
    Деструктуризацию массива также выполняют в конструкции <a href="control-structures.foreach.php" class="link"><code class="literal">foreach</code></a>
    для деструктуризации многомерного массива во время итерации по массиву.
   </p>

   <div class="example" id="example-12">
    <p><strong>Пример #12 Деструктуризация массива в конструкции foreach</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><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 />}</span></span></code></div>
    </div>

   </div>

   <p class="para">
    Деструктуризация проигнорирует элементы массива, для которых не указали переменную.
    Деструктуризация массива начинается с индекса <code class="literal">0</code>.
   </p>

   <div class="example" id="example-13">
    <p><strong>Пример #13 Игнорирование элементов</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><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"</span></span></code></div>
    </div>

   </div>

   <p class="para">
    Начиная с PHP 7.1.0 поддерживается деструктуризация ассоциативных массивов.
    Это упрощает выбор элемента в массивах с числовым индексом,
    поскольку разрешает явно указать индекс.
   </p>

   <div class="example" id="example-14">
    <p><strong>Пример #14 Деструктуризация ассоциативных массивов</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><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"</span></span></code></div>
    </div>

   </div>

   <p class="para">
    Массив деструктурируют, чтобы поменять две переменные местами.
   </p>

   <div class="example" id="example-15">
    <p><strong>Пример #15 Перестановка двух переменных</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><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 />[</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 />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</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>,
     или ошибки уровня <strong><code><a href="errorfunc.constants.php#constant.e-notice">E_NOTICE</a></code></strong> до PHP 8.0.0,
     а результатом становится значение <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> умеет удалять ключи массива.
    Обратите внимание, что массив <em>НЕ</em>
    переиндексируется. Массив переиндексируют функцией <span class="function"><a href="function.array-values.php" class="function">array_values()</a></span>,
    если требуется поведение в стиле «удалить и сдвинуть».
   </p>

   <div class="example" id="example-16">
    <p><strong>Пример #16 Удаление промежуточных элементов</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><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">'один'</span><span style="color: #007700">, </span><span style="color: #0000BB">2 </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'два'</span><span style="color: #007700">, </span><span style="color: #0000BB">3 </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'три'</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">/* Удаление элемента изменит массив так, как если бы его определили так:<br />   $a = array(1 =&gt; 'один', 3 =&gt; 'три');<br />   но НЕ так:<br />   $a = array(1 =&gt; 'один', 2 =&gt; 'три');<br />*/<br /></span><span style="color: #007700">unset(</span><span style="color: #0000BB">$a</span><span style="color: #007700">[</span><span style="color: #0000BB">2</span><span style="color: #007700">]);<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$a</span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">$b </span><span style="color: #007700">= </span><span style="color: #0000BB">array_values</span><span style="color: #007700">(</span><span style="color: #0000BB">$a</span><span style="color: #007700">);<br /></span><span style="color: #FF8000">// Теперь переменная $b содержит array(0 =&gt; 'один', 1 =&gt; 'три')<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$b</span><span style="color: #007700">);</span></span></code></div>
    </div>

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

  <p class="para">
   Управляющая конструкция <a href="control-structures.foreach.php" class="link"><code class="literal">foreach</code></a> появилась в языке для перебора массивов.
   Конструкция предлагает простой способ обхода массива.

  </p>
 </div>

 <div class="sect2" id="language.types.array.donts">
  <h3 class="title">Что можно и нельзя делать с массивами</h3>

  <div class="sect3" id="language.types.array.foo-bar">
   <h4 class="title">Почему выражение <code class="literal">$foo[bar]</code> неверно?</h4>

   <p class="para">
    Строковый литерал в индексе ассоциативного массива лучше брать в кавычки.
    Например, правильно писать <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 /><br />$foo</span><span style="color: #007700">[</span><span style="color: #0000BB">bar</span><span style="color: #007700">] = </span><span style="color: #DD0000">'враг'</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">// и т. д.</span></span></code></div>
    </div>

   </div>

   <p class="para">
    Неправильно записывать ключ без кавычек, хотя такой код и работает. Причина заключается в интерпретации незакавыченного ключа
    как неопределённой константы <code class="literal">bar</code>, а не строки <code class="literal">&#039;bar&#039;</code> — литерала в кавычках.
    Код работает из-за автоматического преобразования
    <em>«голой строки»</em> — строки без кавычек,
    которая не соответствует ни одному известному символу, — в строку
    со значением такой «голой строки». PHP подставит вместо bar
    строку <code class="literal">&#039;bar&#039;</code>,
    если в текущей области видимости недоступна константа с названием <strong><code>bar</code></strong>.
   </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>,
    поскольку закавычивание помешает интерпретации.
   </p>

   <div class="example" id="example-17">
    <p><strong>Пример #17 Закавычивание ключей</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><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 />}</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 Дополнительные примеры</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: #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 />// Неверно. Это не работает и выбрасывает PHP-ошибку Error из-за неопределённой константы<br />// с названием fruit<br />//<br />// Error: Undefined constant "fruit"<br /></span><span style="color: #007700">try {<br />    echo </span><span style="color: #0000BB">$arr</span><span style="color: #007700">[</span><span style="color: #0000BB">fruit</span><span style="color: #007700">];<br />} catch (</span><span style="color: #0000BB">Error $e</span><span style="color: #007700">) {<br />    echo </span><span style="color: #0000BB">get_class</span><span style="color: #007700">(</span><span style="color: #0000BB">$e</span><span style="color: #007700">), </span><span style="color: #DD0000">': '</span><span style="color: #007700">, </span><span style="color: #0000BB">$e</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">getMessage</span><span style="color: #007700">(), </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #FF8000">// Определим константу и посмотрим,<br />// как изменится поведение кода. Присвоим константе с названием fruit значение "veggie".<br /></span><span style="color: #0000BB">define</span><span style="color: #007700">(</span><span style="color: #DD0000">'fruit'</span><span style="color: #007700">, </span><span style="color: #DD0000">'veggie'</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// Теперь обратите внимание на разницу<br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">$arr</span><span style="color: #007700">[</span><span style="color: #DD0000">'fruit'</span><span style="color: #007700">], </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;  </span><span style="color: #FF8000">// apple<br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">$arr</span><span style="color: #007700">[</span><span style="color: #0000BB">fruit</span><span style="color: #007700">], </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;    </span><span style="color: #FF8000">// carrot<br /><br />// Доступ по ключу без кавычек сработает внутри строки. PHP не ищет константы внутри строк,<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 />// За одним исключением: PHP интерпретирует константы,<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</span></span></code></div>
    </div>

   </div>

   <div class="informalexample">
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #FF8000">// Это не сработает и вызовет ошибку разбора наподобие:<br />// Parse error: parse error, expecting T_STRING' or T_VARIABLE' or T_NUM_STRING'.<br />// Это относится и к суперглобальным переменным в строках<br /></span><span style="color: #007700">print </span><span style="color: #DD0000">"Hello </span><span style="color: #0000BB">$arr</span><span style="color: #007700">[</span><span style="color: #DD0000">'fruit']"</span><span style="color: #007700">;<br />print </span><span style="color: #DD0000">"Hello </span><span style="color: #0000BB">$_GET</span><span style="color: #007700">[</span><span style="color: #DD0000">'foo']"</span><span style="color: #007700">;</span></span></code></div>
    </div>

   </div>

   <p class="para">
    Как указывает раздел <a href="language.types.array.php#language.types.array.syntax" class="link">о синтаксисе</a>,
    внутри квадратных скобок &#039;<code class="literal">[</code>&#039; и &#039;<code class="literal">]</code>&#039; требуется указывать выражение. Поэтому следующий код работает:
   </p>

   <div class="informalexample">
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><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">)];</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 /><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">"Произошла фатальная ошибка"</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 сообщает о предупреждении"</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">"Это лишь неофициальное замечание"</span><span style="color: #007700">;</span></span></code></div>
    </div>

   </div>

   <p class="para">
    Обратите внимание, что <strong><code><a href="errorfunc.constants.php#constant.e-error">E_ERROR</a></code></strong> — это такой же
    допустимый идентификатор, как и <code class="literal">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 /><br />$error_descriptions</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">] = </span><span style="color: #DD0000">"Произошла фатальная ошибка"</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 выдал предупреждение"</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">"Это просто уведомление"</span><span style="color: #007700">;</span></span></code></div>
    </div>

   </div>

   <p class="para">
    поскольку значение константы <strong><code><a href="errorfunc.constants.php#constant.e-error">E_ERROR</a></code></strong> соответствует значению <code class="literal">1</code> и т. д.
   </p>

   <div class="sect4" id="language.types.array.foo-bar.why">
    <h5 class="title">Так что же в этом плохого?</h5>

    <p class="para">
     Когда-нибудь в будущем команда разработчиков PHP, возможно, захочет
     добавить ещё одну константу или ключевое слово, либо константа из
     другого кода может вмешаться.
     Например, неправильно использовать
     слова <code class="literal">empty</code> и
     <code class="literal">default</code>, поскольку они относятся к
     <a href="reserved.php" class="link">зарезервированным ключевым словам</a>.
    </p>

    <blockquote class="note"><p><strong class="note">Замечание</strong>: 
     <span class="simpara">
      Повторим, внутри строки (<span class="type"><a href="language.types.string.php" class="type string">string</a></span>)
      в двойных кавычках допустимо не окружать индексы
      массива кавычками, поэтому <code class="literal">&quot;$foo[bar]&quot;</code> —
      допустимая запись. В примерах выше объяснено, почему,
      дополнительная информация дана в разделе
      <a href="language.types.string.php#language.types.string.parsing" class="link">об обработке
      переменных в строках</a>.
     </span>
    </p></blockquote>

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

 <div class="sect2" id="language.types.array.casting">
  <h3 class="title">Преобразование в массив</h3>

  <p class="para">
   Преобразование целого числа (<span class="type"><a href="language.types.integer.php" class="type int">int</a></span>), числа с плавающей точкой (<span class="type"><a href="language.types.float.php" class="type float">float</a></span>),
   строки (<span class="type"><a href="language.types.string.php" class="type string">string</a></span>), логического значения (<span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span>) или ресурса (<span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span>)
   в массив — создаёт массив
   с одним элементом с индексом 0 и значением скаляра, который
   был преобразован. Говоря по-другому, выражение <code class="code">(array) $scalarValue</code>
   аналогично выражению <code class="literal">array($scalarValue)</code>.
  </p>

  <p class="para">
   При преобразовании объекта (<span class="type"><a href="language.types.object.php" class="type object">object</a></span>) в массив
   элементами массива становятся свойства (переменные-члены)
   этого объекта. Ключами становятся имена переменных-членов, со следующими примечательными
   исключениями: целочисленные свойства становятся недоступными;
   к закрытым полям класса (private) в начало дописывается название класса;
   к защищённым полям класса (protected) в начало добавляется символ &#039;*&#039;.
   Эти добавленные с обоих сторон значения также получат <code class="literal">NUL</code>-байты.
   Неинициализированные <a href="language.oop5.properties.php#language.oop5.properties.typed-properties" class="link">типизированные свойства</a>
   автоматически отбрасываются.
  </p>

  <div class="example" id="example-19">
   <p><strong>Пример #19 Преобразование в массив</strong></p>
   <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">class </span><span style="color: #0000BB">A<br /></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 /><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">());</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">
   Это может вызвать несколько неожиданное поведение:
  </p>

  <div class="example" id="example-20">
   <p><strong>Пример #20 Приведение объекта к массиву</strong></p>
   <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">class </span><span style="color: #0000BB">A<br /></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<br /></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">());</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">
   Приведённый код покажет 2 ключа с названием &#039;AA&#039;, хотя один ключ на самом деле
   называется &#039;\0A\0A&#039;.
  </p>

  <p class="para">
   Получится пустой массив,
   если преобразовать в массив значение <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong>.
  </p>
 </div>

 <div class="sect2" id="language.types.array.comparing">
  <h3 class="title">Сравнение</h3>

  <p class="para">
   Массивы сравнивают функцией <span class="function"><a href="function.array-diff.php" class="function">array_diff()</a></span>
   и <a href="language.operators.array.php" class="link">операторами массивов</a>.
  </p>
 </div>

 <div class="sect2" id="language.types.array.unpacking">
  <h3 class="title">Распаковка массива</h3>

  <p class="para">
   Массив, перед которым указали оператор <code class="code">...</code>, распакуется на месте при определении нового массива.
   Распаковка доступна только массивам и объектам, которые реализуют интерфейс
   <span class="interfacename"><a href="class.traversable.php" class="interfacename">Traversable</a></span>.
   Распаковка массива spread-оператором <code class="code">...</code> доступна с PHP 7.4.0.
  </p>

  <p class="para">
   PHP поддерживает многократное чередование распаковки и стандартных элементов до или после оператора <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 /><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 /><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">);</span></span></code></div>
    </div>

   </div>
  </p>

  <p class="para">
   Распаковка массива оператором <code class="code">...</code> соблюдает семантику функции <span class="function"><a href="function.array-merge.php" class="function">array_merge()</a></span>,
   поэтому более поздние строковые ключи перезаписывают более ранние, а целочисленные ключи перенумеровываются:
   <div class="example" id="example-22">
    <p><strong>Пример #22 Распаковка массива с дублирующим ключом</strong></p>
    <div class="example-contents">
     <div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #FF8000">// Строковый ключ<br /></span><span style="color: #0000BB">$arr1 </span><span style="color: #007700">= [</span><span style="color: #DD0000">"a" </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">1</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">$arr2 </span><span style="color: #007700">= [</span><span style="color: #DD0000">"a" </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">2</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">$arr3 </span><span style="color: #007700">= [</span><span style="color: #DD0000">"a" </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">0</span><span style="color: #007700">, ...</span><span style="color: #0000BB">$arr1</span><span style="color: #007700">, ...</span><span style="color: #0000BB">$arr2</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$arr3</span><span style="color: #007700">); </span><span style="color: #FF8000">// ["a" =&gt; 2]<br /><br />// Целочисленный ключ<br /></span><span style="color: #0000BB">$arr4 </span><span style="color: #007700">= [</span><span style="color: #0000BB">1</span><span style="color: #007700">, </span><span style="color: #0000BB">2</span><span style="color: #007700">, </span><span style="color: #0000BB">3</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">$arr5 </span><span style="color: #007700">= [</span><span style="color: #0000BB">4</span><span style="color: #007700">, </span><span style="color: #0000BB">5</span><span style="color: #007700">, </span><span style="color: #0000BB">6</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">$arr6 </span><span style="color: #007700">= [...</span><span style="color: #0000BB">$arr4</span><span style="color: #007700">, ...</span><span style="color: #0000BB">$arr5</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$arr6</span><span style="color: #007700">); </span><span style="color: #FF8000">// [1, 2, 3, 4, 5, 6]<br />// Распаковка массивов создаёт массив [0 =&gt; 1, 1 =&gt; 2, 2 =&gt; 3, 3 =&gt; 4, 4 =&gt; 5, 5 =&gt; 6],<br />// в котором исходные целочисленные ключи не сохраняются</span></span></code></div>
    </div>

   </div>
  </p>

  <blockquote class="note"><p><strong class="note">Замечание</strong>: 
   <p class="para">
    Ключи, которые не принадлежат ни целочисленному, ни строковому типу,
    выбрасывают ошибку <span class="classname"><a href="class.typeerror.php" class="classname">TypeError</a></span>.
    Такие ключи генерируют только объекты, класс которых реализует интерфейс <span class="interfacename"><a href="class.traversable.php" class="interfacename">Traversable</a></span>.
   </p>
  </p></blockquote>
  <blockquote class="note"><p><strong class="note">Замечание</strong>: 
   <p class="para">
    До PHP 8.1 распаковка массива со строковым ключом не поддерживалась:
   </p>
   <div class="informalexample">
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br />$arr1 </span><span style="color: #007700">= [</span><span style="color: #0000BB">1</span><span style="color: #007700">, </span><span style="color: #0000BB">2</span><span style="color: #007700">, </span><span style="color: #0000BB">3</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">$arr2 </span><span style="color: #007700">= [</span><span style="color: #DD0000">'a' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">4</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">$arr3 </span><span style="color: #007700">= [...</span><span style="color: #0000BB">$arr1</span><span style="color: #007700">, ...</span><span style="color: #0000BB">$arr2</span><span style="color: #007700">];<br /></span><span style="color: #FF8000">// Fatal error: Uncaught Error: Cannot unpack array with string keys in example.php:5<br /></span><span style="color: #0000BB">$arr4 </span><span style="color: #007700">= [</span><span style="color: #0000BB">1</span><span style="color: #007700">, </span><span style="color: #0000BB">2</span><span style="color: #007700">, </span><span style="color: #0000BB">3</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">$arr5 </span><span style="color: #007700">= [</span><span style="color: #0000BB">4</span><span style="color: #007700">, </span><span style="color: #0000BB">5</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">$arr6 </span><span style="color: #007700">= [...</span><span style="color: #0000BB">$arr4</span><span style="color: #007700">, ...</span><span style="color: #0000BB">$arr5</span><span style="color: #007700">]; </span><span style="color: #FF8000">// Работает: [1, 2, 3, 4, 5]</span></span></code></div>
    </div>

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

 </div>

 <div class="sect2" id="language.types.array.examples">
  <h3 class="title">Примеры</h3>

  <p class="para">
   Массив в PHP — гибкий тип данных. Вот несколько примеров:
  </p>

  <div class="example" id="example-23">
   <p><strong>Пример #23 Видимость массивов</strong></p>
   <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><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">'красный'</span><span style="color: #007700">,<br />            </span><span style="color: #DD0000">'taste' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'сладкий'</span><span style="color: #007700">,<br />            </span><span style="color: #DD0000">'shape' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'круг'</span><span style="color: #007700">,<br />            </span><span style="color: #DD0000">'name'  </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'яблоко'</span><span style="color: #007700">,<br />            </span><span style="color: #0000BB">4        </span><span style="color: #FF8000">// PHP назначит элементу ключ 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">'красный'</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">'сладкий'</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">'круг'</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">'яблоко'</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; 'красный', 'taste' =&gt; 'сладкий', 'shape' =&gt; 'круг',<br />// 'name' =&gt; 'яблоко', 0 =&gt; 4), а переменная $b станет массивом<br />// array(0 =&gt; 'a', 1 =&gt; 'b', 2 =&gt; 'c'), или просто array('a', 'b', 'c')<br /><br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$a</span><span style="color: #007700">, </span><span style="color: #0000BB">$b</span><span style="color: #007700">);</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 /><br /></span><span style="color: #FF8000">// Массив как карта (свойств)<br /></span><span style="color: #0000BB">$map </span><span style="color: #007700">= array(<br />    </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 /><br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$map</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// Строго числовые ключи,<br />// что эквивалентно массиву array(0 =&gt; 7, 1 =&gt; 8, ...)<br /></span><span style="color: #0000BB">$array </span><span style="color: #007700">= array(<br />    </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(<br />    </span><span style="color: #0000BB">10</span><span style="color: #007700">,         </span><span style="color: #FF8000">// ключ = 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">// ключ = 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">// ключ = 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">// ключ = '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">);</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 /><br />$colors </span><span style="color: #007700">= array(</span><span style="color: #DD0000">'красный'</span><span style="color: #007700">, </span><span style="color: #DD0000">'голубой'</span><span style="color: #007700">, </span><span style="color: #DD0000">'зелёный'</span><span style="color: #007700">, </span><span style="color: #DD0000">'жёлтый'</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">"Вам нравится </span><span style="color: #0000BB">$color</span><span style="color: #DD0000">?\n"</span><span style="color: #007700">;<br />}</span></span></code></div>
   </div>

   
<div class="example-contents"><p>
 Результат выполнения приведённого примера:
</p></div>

   <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
Вам нравится красный?
Вам нравится голубой?
Вам нравится зелёный?
Вам нравится жёлтый?
</pre></div>
   </div>
  </div>

  <p class="para">
   Непосредственное изменение значений массива
   допустимо через передачу значений по ссылке.
  </p>

  <div class="example" id="language.types.array.examples.changeloop">
   <p><strong>Пример #26 Изменение элемента в цикле</strong></p>
   <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><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">);</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; КРАСНЫЙ
    [1] =&gt; ГОЛУБОЙ
    [2] =&gt; ЗЕЛЁНЫЙ
    [3] =&gt; ЖЁЛТЫЙ
)
</pre></div>
   </div>
  </div>

  <p class="para">
   Следующий пример создаёт массив, индексация которого начинается с единицы.
  </p>

  <div class="example" id="example-25">
   <p><strong>Пример #27 Индексация с единицы</strong></p>
   <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><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">'январь'</span><span style="color: #007700">, </span><span style="color: #DD0000">'февраль'</span><span style="color: #007700">, </span><span style="color: #DD0000">'март'</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">);</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; &#039;январь&#039;
    [2] =&gt; &#039;февраль&#039;
    [3] =&gt; &#039;март&#039;
)
</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 /><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">);</span></span></code></div>
   </div>

  </div>

  <p class="para">
   Массивы упорядочены. Порядок изменяют
   разными функциями сортировки. Подробнее об этом рассказано
   в разделе «<a href="ref.array.php" class="link">Функции для работы с массивами</a>».
   Для подсчёта количества элементов в массиве вызывают функцию <span class="function"><a href="function.count.php" class="function">count()</a></span>.
  </p>

  <div class="example" id="example-27">
   <p><strong>Пример #29 Сортировка массива</strong></p>
   <div class="example-contents">
<div class="annotation-non-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><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">);</span></span></code></div>
   </div>

  </div>

  <p class="para">
   Массивы поддерживают значения в виде других массивов, поскольку массивы принимают произвольные значения.
   Поэтому PHP разрешает создавать рекурсивные и многомерные массивы.
  </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 /><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">"апельсин"</span><span style="color: #007700">,<br />                                       </span><span style="color: #DD0000">"b" </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">"банан"</span><span style="color: #007700">,<br />                                       </span><span style="color: #DD0000">"c" </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">"яблоко"<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">"первая"</span><span style="color: #007700">,<br />                                       </span><span style="color: #0000BB">5 </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">"вторая"</span><span style="color: #007700">,<br />                                            </span><span style="color: #DD0000">"третья"<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">// Выведет "вторая"<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">// напечатает "апельсин"<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">// удалит "первая"<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">"хороший"</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">);</span></span></code></div>
   </div>

  </div>

  <p class="para">
   Присваивание массива включает копирование значения. Чтобы скопировать массив
   по ссылке, указывают <a href="language.operators.php" class="link">оператор присваивания по ссылке</a>.
  </p>

  <div class="example" id="example-29">
   <p><strong>Пример #31 Копирование массивов</strong></p>
   <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><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">);</span></span></code></div>
   </div>

  </div>

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