<?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 => 'uk',
  ),
  'this' => 
  array (
    0 => 'language.types.array.php',
    1 => 'Масив (array)',
    2 => 'Масив (array)',
  ),
  'up' => 
  array (
    0 => 'language.types.php',
    1 => 'Типи',
  ),
  'prev' => 
  array (
    0 => 'language.types.numeric-strings.php',
    1 => 'Numeric strings',
  ),
  'next' => 
  array (
    0 => 'language.types.object.php',
    1 => 'Objects',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'uk',
    'path' => 'language/types/array.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

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

 <p class="para">
  Масив в PHP - це упорядкована структура даних, яка зв&#039;язує
  <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">
     Існує короткий синтаксис масиву, який замінює
     <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="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$array </span><span style="color: #007700">= array(<br />    </span><span style="color: #DD0000">"foo" </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">"bar"</span><span style="color: #007700">,<br />    </span><span style="color: #DD0000">"bar" </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">"foo"</span><span style="color: #007700">,<br />);<br /><br /></span><span style="color: #FF8000">// Використання короткого синтаксису масиву<br /></span><span style="color: #0000BB">$array </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 /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
   
   <p class="para">
    Ключ масиву (<span class="replaceable">key</span>) може бути заданий цілим числом
    (<span class="type"><a href="language.types.integer.php" class="type int">int</a></span>) або строкою (<span class="type"><a href="language.types.string.php" class="type string">string</a></span>). Значення масиву
    (<span class="replaceable">value</span>) може бути будь-яким типом.
   </p>
   
   <p class="para" id="language.types.array.key-casts">
    Крім того, відбуватимуться наступні приведення ключів <span class="replaceable">key</span>:
    <ul class="itemizedlist">
     <li class="listitem">
      <span class="simpara">
       Рядки (<span class="type"><a href="language.types.string.php" class="type string">string</a></span>), що містять десяткові цілі числа (<span class="type"><a href="language.types.integer.php" class="type int">int</a></span>) 
       (за винятком, коли перед числом не стоїть знак <code class="literal">+</code>), будуть приведені
       до типу <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>. Наприклад ключ <code class="literal">&quot;8&quot;</code> фактично зберігатиметься
       під <code class="literal">8</code>. З іншого боку, <code class="literal">&quot;08&quot;</code> не буде приведено, 
       оскільки це недійсне десяткове ціле число.
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       Десяткові дроби (<span class="type"><a href="language.types.float.php" class="type float">float</a></span>) також перетворюються на цілі числа (<span class="type"><a href="language.types.integer.php" class="type int">int</a></span>),
       що означає, що дробова частина буде скорочена. Наприклад ключ <code class="literal">8.7</code> фактично
       зберігатиметься під <code class="literal">8</code>.
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       Логічний тип (<span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span>) також перетворюється на ціле число (<span class="type"><a href="language.types.integer.php" class="type int">int</a></span>), тобто ключ
       <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> фактично зберігатиметься під <code class="literal">1</code>, а ключ <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> під <code class="literal">0</code>.
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       Тип <span class="type"><a href="language.types.null.php" class="type null">null</a></span> буде приведено до порожнього рядка, тобто ключ
       <code class="literal">null</code> фактично зберігатиметься під <code class="literal">&quot;&quot;</code>.
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       Масиви (<span class="type"><a href="language.types.array.php" class="type array">array</a></span>) та обʼєкти (<span class="type"><a href="language.types.object.php" class="type object">object</a></span>) <em>не можуть</em> 
       бути використані як ключі.
       Це призведе до попередження: <code class="literal">Illegal offset type</code>.
      </span>
     </li>
    </ul>
   </p>
   
   <p class="para">
    Якщо кілька елементів в оголошенні масиву використовують той самий ключ, буде використано
    лише останній, оскільки всі інші буде перезаписано.
   </p>
   
   <div class="example" id="example-2">
    <p><strong>Приклад #2 Приклад переведення типів і перезапису</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$array </span><span style="color: #007700">= array(<br />    </span><span style="color: #0000BB">1    </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">"a"</span><span style="color: #007700">,<br />    </span><span style="color: #DD0000">"1"  </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">"b"</span><span style="color: #007700">,<br />    </span><span style="color: #0000BB">1.5  </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">"c"</span><span style="color: #007700">,<br />    </span><span style="color: #0000BB">true </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">"d"</span><span style="color: #007700">,<br />);<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$array</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    <div class="example-contents"><p>Поданий вище приклад
виведе:</p></div>
    <div class="example-contents screen">
<div class="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="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$array </span><span style="color: #007700">= array(<br />    </span><span style="color: #DD0000">"foo" </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">"bar"</span><span style="color: #007700">,<br />    </span><span style="color: #DD0000">"bar" </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">"foo"</span><span style="color: #007700">,<br />    </span><span style="color: #0000BB">100   </span><span style="color: #007700">=&gt; -</span><span style="color: #0000BB">100</span><span style="color: #007700">,<br />    -</span><span style="color: #0000BB">100  </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">100</span><span style="color: #007700">,<br />);<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$array</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    <div class="example-contents"><p>Поданий вище приклад
виведе:</p></div>
    <div class="example-contents screen">
<div class="cdata"><pre>
array(4) {
  [&quot;foo&quot;]=&gt;
  string(3) &quot;bar&quot;
  [&quot;bar&quot;]=&gt;
  string(3) &quot;foo&quot;
  [100]=&gt;
  int(-100)
  [-100]=&gt;
  int(100)
}
</pre></div>
    </div>
   </div>
   
   <p class="para">
    Ключ (<span class="replaceable">key</span>) необов&#039;язковий. Якщо його не вказано, PHP
    використовуватиме приріст найбільшого раніше використаного цілого (<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="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$array </span><span style="color: #007700">= array(</span><span style="color: #DD0000">"foo"</span><span style="color: #007700">, </span><span style="color: #DD0000">"bar"</span><span style="color: #007700">, </span><span style="color: #DD0000">"hello"</span><span style="color: #007700">, </span><span style="color: #DD0000">"world"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$array</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    <div class="example-contents"><p>Поданий вище приклад
виведе:</p></div>
    <div class="example-contents screen">
<div class="cdata"><pre>
array(4) {
  [0]=&gt;
  string(3) &quot;foo&quot;
  [1]=&gt;
  string(3) &quot;bar&quot;
  [2]=&gt;
  string(5) &quot;hello&quot;
  [3]=&gt;
  string(5) &quot;world&quot;
}
</pre></div>
    </div>
   </div>
   
   <p class="para">
    Можна вказати ключ для одних елементів і не вказати для інших:
   </p>
   
   <div class="example" id="example-5">
    <p><strong>Приклад #5 Ключі не на всіх елементах</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$array </span><span style="color: #007700">= array(<br />         </span><span style="color: #DD0000">"a"</span><span style="color: #007700">,<br />         </span><span style="color: #DD0000">"b"</span><span style="color: #007700">,<br />    </span><span style="color: #0000BB">6 </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">"c"</span><span style="color: #007700">,<br />         </span><span style="color: #DD0000">"d"</span><span style="color: #007700">,<br />);<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$array</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    <div class="example-contents"><p>Поданий вище приклад
виведе:</p></div>
    <div class="example-contents screen">
<div class="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="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$array </span><span style="color: #007700">= array(<br />    </span><span style="color: #0000BB">1    </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'a'</span><span style="color: #007700">,<br />    </span><span style="color: #DD0000">'1'  </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'b'</span><span style="color: #007700">, </span><span style="color: #FF8000">// значення "a" буде перезаписано значенням "b"<br />    </span><span style="color: #0000BB">1.5  </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'c'</span><span style="color: #007700">, </span><span style="color: #FF8000">// значення "b" буде перезаписано значенням "c"<br />    </span><span style="color: #007700">-</span><span style="color: #0000BB">1 </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'d'</span><span style="color: #007700">,<br />    </span><span style="color: #DD0000">'01'  </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'e'</span><span style="color: #007700">, </span><span style="color: #FF8000">// оскільки ключ не є цілим числом, він НЕ перезапише ключ для 1<br />    </span><span style="color: #DD0000">'1.5' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'f'</span><span style="color: #007700">, </span><span style="color: #FF8000">// оскільки ключ не є цілим числом, він НЕ перезапише ключ для 1<br />    </span><span style="color: #0000BB">true </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'g'</span><span style="color: #007700">, </span><span style="color: #FF8000">// значення "c" буде перезаписано значенням "g"<br />    </span><span style="color: #0000BB">false </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'h'</span><span style="color: #007700">,<br />    </span><span style="color: #DD0000">'' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'i'</span><span style="color: #007700">,<br />    </span><span style="color: #0000BB">null </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'j'</span><span style="color: #007700">, </span><span style="color: #FF8000">// значення "i" буде перезаписано значенням "j"<br />    </span><span style="color: #DD0000">'k'</span><span style="color: #007700">, </span><span style="color: #FF8000">// значенню "k" буде присвоєно ключ 2. Це тому, що найбільший ключ цілого числа до цього був 1<br />    </span><span style="color: #0000BB">2 </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'l'</span><span style="color: #007700">, </span><span style="color: #FF8000">// значення "k" буде перезаписано значенням "l"<br /></span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$array</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    <div class="example-contents"><p>Поданий вище приклад
виведе:</p></div>
    <div class="example-contents screen">
<div class="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>
  
  <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-7">
    <p><strong>Приклад #7 Доступ до елементів масиву</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$array </span><span style="color: #007700">= array(<br />    </span><span style="color: #DD0000">"foo" </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">"bar"</span><span style="color: #007700">,<br />    </span><span style="color: #0000BB">42    </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">24</span><span style="color: #007700">,<br />    </span><span style="color: #DD0000">"multi" </span><span style="color: #007700">=&gt; array(<br />         </span><span style="color: #DD0000">"dimensional" </span><span style="color: #007700">=&gt; array(<br />             </span><span style="color: #DD0000">"array" </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">"foo"<br />         </span><span style="color: #007700">)<br />    )<br />);<br /><br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$array</span><span style="color: #007700">[</span><span style="color: #DD0000">"foo"</span><span style="color: #007700">]);<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$array</span><span style="color: #007700">[</span><span style="color: #0000BB">42</span><span style="color: #007700">]);<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$array</span><span style="color: #007700">[</span><span style="color: #DD0000">"multi"</span><span style="color: #007700">][</span><span style="color: #DD0000">"dimensional"</span><span style="color: #007700">][</span><span style="color: #DD0000">"array"</span><span style="color: #007700">]);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    <div class="example-contents"><p>Поданий вище приклад
виведе:</p></div>
    <div class="example-contents screen">
<div class="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-8">
    <p><strong>Приклад #8 Розіменування масиву</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">getArray</span><span style="color: #007700">() {<br />    return array(</span><span style="color: #0000BB">1</span><span style="color: #007700">, </span><span style="color: #0000BB">2</span><span style="color: #007700">, </span><span style="color: #0000BB">3</span><span style="color: #007700">);<br />}<br /><br /></span><span style="color: #0000BB">$secondElement </span><span style="color: #007700">= </span><span style="color: #0000BB">getArray</span><span style="color: #007700">()[</span><span style="color: #0000BB">1</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
 
   <blockquote class="note"><p><strong class="note">Зауваження</strong>: 
    <p class="para">
     Спроба отримати доступ до ключа масиву, який не було визначено,
     це теж саме, як доступ до будь-якої іншої невизначеної змінної:
     буде видано помилку рівня <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong>
     (рівень <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">
     Розіменування масиву скалярного значення, яке не є рядком (<span class="type"><a href="language.types.string.php" class="type string">string</a></span>),
     дає <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong>. До PHP 7.4.0 це не видавало повідомлення про помилку.
     Починаючи з PHP 7.4.0, це видає помилку рівня <strong><code><a href="errorfunc.constants.php#constant.e-notice">E_NOTICE</a></code></strong>;
     починаючи з PHP 8.0.0, це видає помилку рівня <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong>.
    </p>
   </p></blockquote>
  </div>
  
  <div class="sect3" id="language.types.array.syntax.modifying">
   <h4 class="title">Створення/змінення за допомогою синтаксису квадратних дужок</h4>

   <p class="para">
    Існуючий масив можна змінити, явно задавши в ньому значення.
   </p>

   <p class="para">
    Це робиться шляхом присвоєння значень масиву (<span class="type"><a href="language.types.array.php" class="type array">array</a></span>) із зазначенням
    ключа в дужках. Ключ також можна опустити, що призведе до пустої пари дужок (<code class="literal">[]</code>).
   </p>
   
   <pre class="synopsis">
$arr[<span class="replaceable">key</span>] = <span class="replaceable">value</span>;
$arr[] = <span class="replaceable">value</span>;
// Ключ <span class="replaceable">key</span> може бути типом <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> або <span class="type"><a href="language.types.string.php" class="type string">string</a></span>
// Значення <span class="replaceable">value</span> може бути будь-яким значенням будь-якого типу</pre>
   
   <p class="para">
    Якщо <var class="varname">$arr</var> ще не існує або має значення <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> або <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>, він буде створений,
    тому це також альтернативний спосіб створення масиву (<span class="type"><a href="language.types.array.php" class="type array">array</a></span>). Однак така практика
    не рекомендується, оскільки якщо <var class="varname">$arr</var> вже містить певне значення (наприклад,
    рядок (<span class="type"><a href="language.types.string.php" class="type string">string</a></span>) із змінної запиту), то це значення залишиться на місці, а <code class="literal">[]</code>
    може фактично означати <a href="language.types.string.php#language.types.string.substr" class="link">оператор доступу до рядка</a>.
    Завжди краще ініціалізувати змінну прямим присвоєнням.
   </p>
   <blockquote class="note"><p><strong class="note">Зауваження</strong>: 
    <span class="simpara">
     Починаючи з PHP 7.1.0, застосування оператора порожнього індексу до рядка
     викликає фатальну помилку. Раніше рядок автоматично перетворювався на масив.
    </span>
   </p></blockquote>
   <blockquote class="note"><p><strong class="note">Зауваження</strong>: 
    <span class="simpara">
     Починаючи з PHP 8.1.0, створення нового масиву приведенням до нього значення <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> застаріло.
     Створення нового масиву із <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> і невизначених значень все ще дозволено.
    </span>
   </p></blockquote>

   <p class="para">
    Щоб змінити певне значення, призначте нове значення цьому елементу за допомогою його ключа.
    Щоб видалити пару ключ/значення, викликайте для неї функцію <span class="function"><a href="function.unset.php" class="function">unset()</a></span>.
   </p>

   <div class="informalexample">
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$arr </span><span style="color: #007700">= array(</span><span style="color: #0000BB">5 </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">1</span><span style="color: #007700">, </span><span style="color: #0000BB">12 </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">2</span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">$arr</span><span style="color: #007700">[] = </span><span style="color: #0000BB">56</span><span style="color: #007700">;    </span><span style="color: #FF8000">// Це те саме, що $arr[13] = 56;<br />                // на цьому етапі скрипта<br /><br /></span><span style="color: #0000BB">$arr</span><span style="color: #007700">[</span><span style="color: #DD0000">"x"</span><span style="color: #007700">] = </span><span style="color: #0000BB">42</span><span style="color: #007700">; </span><span style="color: #FF8000">// Це додає новий елемент<br />                // до масиву із ключем "x"<br />                <br /></span><span style="color: #007700">unset(</span><span style="color: #0000BB">$arr</span><span style="color: #007700">[</span><span style="color: #0000BB">5</span><span style="color: #007700">]); </span><span style="color: #FF8000">// Це видаляє елемент із масиву<br /><br /></span><span style="color: #007700">unset(</span><span style="color: #0000BB">$arr</span><span style="color: #007700">);    </span><span style="color: #FF8000">// Це видаляє весь масив<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div> 
    </div>

   </div>

   <blockquote class="note"><p><strong class="note">Зауваження</strong>: 
    <p class="para">
     Як згадувалося вище, якщо ключ не вказано, береться максимальний з існуючих
     цілочисельних індексів <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>, і новим ключем буде це максимальне значення плюс 1
     (але принаймні 0). Якщо цілочисельних індексів <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> ще не існує, ключ буде
     <code class="literal">0</code> (нуль).
    </p>

    <p class="para">
     Зверніть увагу, що максимальний цілочисельний ключ, який використовується для цього,
     <em>наразі не обов’язково існує в масиві.</em>. Він повинен існувати в масиві
     лише деякий час з моменту останнього повторного індексування масиву. Наступний приклад ілюструє:
    </p>

    <div class="informalexample">
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// Створюємо простий масив.<br /></span><span style="color: #0000BB">$array </span><span style="color: #007700">= array(</span><span style="color: #0000BB">1</span><span style="color: #007700">, </span><span style="color: #0000BB">2</span><span style="color: #007700">, </span><span style="color: #0000BB">3</span><span style="color: #007700">, </span><span style="color: #0000BB">4</span><span style="color: #007700">, </span><span style="color: #0000BB">5</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">$array</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// Тепер видалимо усі елементи, але залишимо сам масив без змін:<br /></span><span style="color: #007700">foreach (</span><span style="color: #0000BB">$array </span><span style="color: #007700">as </span><span style="color: #0000BB">$i </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">$value</span><span style="color: #007700">) {<br />    unset(</span><span style="color: #0000BB">$array</span><span style="color: #007700">[</span><span style="color: #0000BB">$i</span><span style="color: #007700">]);<br />}<br /></span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">$array</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// Додаємо елемент (зверніть увагу, що новий ключ має значення 5, а не 0).<br /></span><span style="color: #0000BB">$array</span><span style="color: #007700">[] = </span><span style="color: #0000BB">6</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">$array</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// Переіндексація:<br /></span><span style="color: #0000BB">$array </span><span style="color: #007700">= </span><span style="color: #0000BB">array_values</span><span style="color: #007700">(</span><span style="color: #0000BB">$array</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$array</span><span style="color: #007700">[] = </span><span style="color: #0000BB">7</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">$array</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div> 
     </div>

     <p class="para">Поданий вище приклад
виведе:</p>
     <div class="example-contents screen">
<div class="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="informalexample">
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$source_array </span><span style="color: #007700">= [</span><span style="color: #DD0000">'foo'</span><span style="color: #007700">, </span><span style="color: #DD0000">'bar'</span><span style="color: #007700">, </span><span style="color: #DD0000">'baz'</span><span style="color: #007700">];<br /><br />[</span><span style="color: #0000BB">$foo</span><span style="color: #007700">, </span><span style="color: #0000BB">$bar</span><span style="color: #007700">, </span><span style="color: #0000BB">$baz</span><span style="color: #007700">] = </span><span style="color: #0000BB">$source_array</span><span style="color: #007700">;<br /><br />echo </span><span style="color: #0000BB">$foo</span><span style="color: #007700">;    </span><span style="color: #FF8000">// виведе "foo"<br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">$bar</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: #FF8000">// виведе "baz"<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

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

   <div class="informalexample">
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$source_array </span><span style="color: #007700">= [<br />    [</span><span style="color: #0000BB">1</span><span style="color: #007700">, </span><span style="color: #DD0000">'John'</span><span style="color: #007700">],<br />    [</span><span style="color: #0000BB">2</span><span style="color: #007700">, </span><span style="color: #DD0000">'Jane'</span><span style="color: #007700">],<br />];<br /><br />foreach (</span><span style="color: #0000BB">$source_array </span><span style="color: #007700">as [</span><span style="color: #0000BB">$id</span><span style="color: #007700">, </span><span style="color: #0000BB">$name</span><span style="color: #007700">]) {<br />    </span><span style="color: #FF8000">// логіка роботи із $id і $name<br /></span><span style="color: #007700">}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

   <p class="para">
    Елементи масиву ігноруватимуться, якщо змінна не вказана.
    Деструктуризація масиву завжди починається з індексу <code class="literal">0</code>.
   </p>

   <div class="informalexample">
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$source_array </span><span style="color: #007700">= [</span><span style="color: #DD0000">'foo'</span><span style="color: #007700">, </span><span style="color: #DD0000">'bar'</span><span style="color: #007700">, </span><span style="color: #DD0000">'baz'</span><span style="color: #007700">];<br /><br /></span><span style="color: #FF8000">// Признаємо елемент з індексом 2 до змінної $baz<br /></span><span style="color: #007700">[, , </span><span style="color: #0000BB">$baz</span><span style="color: #007700">] = </span><span style="color: #0000BB">$source_array</span><span style="color: #007700">;<br /><br />echo </span><span style="color: #0000BB">$baz</span><span style="color: #007700">;    </span><span style="color: #FF8000">// виведе "baz"<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

   <p class="para">
    Починаючи з PHP 7.1.0, асоціативні масиви також можна деструктурувати.
    Це також дозволяє легше вибирати потрібний елемент у масивах із
    числовими індексами, оскільки індекс можна вказати явно.
   </p>

   <div class="informalexample">
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$source_array </span><span style="color: #007700">= [</span><span style="color: #DD0000">'foo' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">1</span><span style="color: #007700">, </span><span style="color: #DD0000">'bar' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">2</span><span style="color: #007700">, </span><span style="color: #DD0000">'baz' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">3</span><span style="color: #007700">];<br /><br /></span><span style="color: #FF8000">// Призначаємо елемент з індексом 'baz' до змінної $three<br /></span><span style="color: #007700">[</span><span style="color: #DD0000">'baz' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">$three</span><span style="color: #007700">] = </span><span style="color: #0000BB">$source_array</span><span style="color: #007700">;<br /><br />echo </span><span style="color: #0000BB">$three</span><span style="color: #007700">;    </span><span style="color: #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: #FF8000">// виведе "baz"<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

   <p class="para">
    Деструктуризація масиву може бути використана для легкої заміни двох змінних..
   </p>

   <div class="informalexample">
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$a </span><span style="color: #007700">= </span><span style="color: #0000BB">1</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$b </span><span style="color: #007700">= </span><span style="color: #0000BB">2</span><span style="color: #007700">;<br /><br />[</span><span style="color: #0000BB">$b</span><span style="color: #007700">, </span><span style="color: #0000BB">$a</span><span style="color: #007700">] = [</span><span style="color: #0000BB">$a</span><span style="color: #007700">, </span><span style="color: #0000BB">$b</span><span style="color: #007700">];<br /><br />echo </span><span style="color: #0000BB">$a</span><span style="color: #007700">;    </span><span style="color: #FF8000">// виведе 2<br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">$b</span><span style="color: #007700">;    </span><span style="color: #FF8000">// виведе 1<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

   <blockquote class="note"><p><strong class="note">Зауваження</strong>: 
    <p class="para">
     Оператор (<code class="literal">...</code>) не підтримується у призначеннях.
    </p>
   </p></blockquote>

   <blockquote class="note"><p><strong class="note">Зауваження</strong>: 
    <p class="para">
     Спроба отримати доступ до ключа масиву, який не було визначено,
     є такою самою, як доступ до будь-якої іншої невизначеної змінної:
     буде видано повідомлення про помилку рівня <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong>
     (рівень <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>
  </div>

 </div>
 
 <div class="sect2" id="language.types.array.useful-funcs">
  <h3 class="title">Корисні функції</h3>

  <p class="para">
   Існує досить багато корисних функцій для роботи з масивами.
   Дивіться розділ &quot;<a href="ref.array.php" class="link">Функції для роботи з масивами</a>&quot;.
  </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="informalexample">
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$a </span><span style="color: #007700">= array(</span><span style="color: #0000BB">1 </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'one'</span><span style="color: #007700">, </span><span style="color: #0000BB">2 </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'two'</span><span style="color: #007700">, </span><span style="color: #0000BB">3 </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'three'</span><span style="color: #007700">);<br />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: #FF8000">/* створить масив, який був би визначений як:<br />   $a = array(1 =&gt; 'one', 3 =&gt; 'three');<br />   a НЕ так:<br />   $a = array(1 =&gt; 'one', 2 =&gt; 'three');<br />*/<br /><br /></span><span style="color: #0000BB">$b </span><span style="color: #007700">= </span><span style="color: #0000BB">array_values</span><span style="color: #007700">(</span><span style="color: #0000BB">$a</span><span style="color: #007700">);<br /></span><span style="color: #FF8000">// Тепер $b це array(0 =&gt; 'one', 1 =&gt; 'three')<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

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

  <p class="para">
   Керуюча структура <a href="control-structures.foreach.php" class="link">foreach</a> існує спеціально для масивів.
   Вона забезпечує простий спосіб обходу масиву.
  </p>
 </div>
 
 <div class="sect2" id="language.types.array.donts">
  <h3 class="title">Array do&#039;s and don&#039;ts</h3>

  <div class="sect3" id="language.types.array.foo-bar">
   <h4 class="title">Why is <code class="literal">$foo[bar]</code> wrong?</h4>

   <p class="para">
    Always use quotes around a string literal array index. For example,
    <code class="literal">$foo[&#039;bar&#039;]</code> is correct, while
    <code class="literal">$foo[bar]</code> is not. But why? It is common to encounter this
    kind of syntax in old scripts:
   </p>

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

   </div>
   
   <p class="para">
    This is wrong, but it works. The reason is that this code has an undefined
    constant (<code class="literal">bar</code>) rather than a <span class="type"><a href="language.types.string.php" class="type string">string</a></span> (<code class="literal">&#039;bar&#039;</code> - notice the
    quotes). It works because PHP automatically converts a
    <em>bare string</em> (an unquoted <span class="type"><a href="language.types.string.php" class="type string">string</a></span> which does
    not correspond to any known symbol) into a <span class="type"><a href="language.types.string.php" class="type string">string</a></span> which
    contains the bare <span class="type"><a href="language.types.string.php" class="type string">string</a></span>. For instance, if there is no defined 
    constant named <strong><code>bar</code></strong>, then PHP will substitute in the
    <span class="type"><a href="language.types.string.php" class="type string">string</a></span> <code class="literal">&#039;bar&#039;</code> and use that.
   </p>
   <div class="warning"><strong class="warning">Увага</strong>
    <p class="simpara">
     The fallback to treat an undefined constant as bare string issues an error
     of level <strong><code><a href="errorfunc.constants.php#constant.e-notice">E_NOTICE</a></code></strong>.
     This has been deprecated as of PHP 7.2.0, and issues an error
     of level <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong>.
     As of PHP 8.0.0, it has been removed and throws an
     <span class="classname"><a href="class.error.php" class="classname">Error</a></span> exception.
    </p>
   </div>

   <blockquote class="note"><p><strong class="note">Зауваження</strong>: 
    <span class="simpara">
     This does not mean to <em>always</em> quote the key. Do not
     quote keys which are <a href="language.constants.php" class="link">constants</a> or
     <a href="language.variables.php" class="link">variables</a>, as this will prevent
     PHP from interpreting them.
    </span>

    <div class="informalexample">
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />error_reporting</span><span style="color: #007700">(</span><span style="color: #0000BB">E_ALL</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">ini_set</span><span style="color: #007700">(</span><span style="color: #DD0000">'display_errors'</span><span style="color: #007700">, </span><span style="color: #0000BB">true</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">ini_set</span><span style="color: #007700">(</span><span style="color: #DD0000">'html_errors'</span><span style="color: #007700">, </span><span style="color: #0000BB">false</span><span style="color: #007700">);<br /></span><span style="color: #FF8000">// Simple array:<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 />for (</span><span style="color: #0000BB">$i </span><span style="color: #007700">= </span><span style="color: #0000BB">0</span><span style="color: #007700">; </span><span style="color: #0000BB">$i </span><span style="color: #007700">&lt; </span><span style="color: #0000BB">$count</span><span style="color: #007700">; </span><span style="color: #0000BB">$i</span><span style="color: #007700">++) {<br />    echo </span><span style="color: #DD0000">"\nChecking </span><span style="color: #0000BB">$i</span><span style="color: #DD0000">: \n"</span><span style="color: #007700">;<br />    echo </span><span style="color: #DD0000">"Bad: " </span><span style="color: #007700">. </span><span style="color: #0000BB">$array</span><span style="color: #007700">[</span><span style="color: #DD0000">'$i'</span><span style="color: #007700">] . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br />    echo </span><span style="color: #DD0000">"Good: " </span><span style="color: #007700">. </span><span style="color: #0000BB">$array</span><span style="color: #007700">[</span><span style="color: #0000BB">$i</span><span style="color: #007700">] . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br />    echo </span><span style="color: #DD0000">"Bad: </span><span style="color: #007700">{</span><span style="color: #0000BB">$array</span><span style="color: #007700">[</span><span style="color: #DD0000">'$i'</span><span style="color: #007700">]}</span><span style="color: #DD0000">\n"</span><span style="color: #007700">;<br />    echo </span><span style="color: #DD0000">"Good: </span><span style="color: #007700">{</span><span style="color: #0000BB">$array</span><span style="color: #007700">[</span><span style="color: #0000BB">$i</span><span style="color: #007700">]}</span><span style="color: #DD0000">\n"</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
    <p class="para">Поданий вище приклад
виведе:</p>
    <div class="example-contents screen">
<div class="cdata"><pre>
Checking 0: 
Notice: Undefined index:  $i in /path/to/script.html on line 9
Bad: 
Good: 1
Notice: Undefined index:  $i in /path/to/script.html on line 11
Bad: 
Good: 1

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

   <p class="para">
    More examples to demonstrate this behaviour:
   </p>

   <div class="informalexample">
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// Show all errors<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">// Correct<br /></span><span style="color: #007700">print </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: #FF8000">// apple<br /></span><span style="color: #007700">print </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: #FF8000">// carrot<br /><br />// Incorrect.  This works but also throws a PHP error of level E_NOTICE because<br />// of an undefined constant named fruit<br />// <br />// Notice: Use of undefined constant fruit - assumed 'fruit' in...<br /></span><span style="color: #007700">print </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: #FF8000">// apple<br /><br />// This defines a constant to demonstrate what's going on.  The value 'veggie'<br />// is assigned to a constant named fruit.<br /></span><span style="color: #0000BB">define</span><span style="color: #007700">(</span><span style="color: #DD0000">'fruit'</span><span style="color: #007700">, </span><span style="color: #DD0000">'veggie'</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// Notice the difference now<br /></span><span style="color: #007700">print </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: #FF8000">// apple<br /></span><span style="color: #007700">print </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: #FF8000">// carrot<br /><br />// The following is okay, as it's inside a string. Constants are not looked for<br />// within strings, so no E_NOTICE occurs here<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: #0000BB">fruit</span><span style="color: #007700">]</span><span style="color: #DD0000">"</span><span style="color: #007700">;      </span><span style="color: #FF8000">// Hello apple<br /><br />// With one exception: braces surrounding arrays within strings allows constants<br />// to be interpreted<br /></span><span style="color: #007700">print </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: #FF8000">// Hello carrot<br /></span><span style="color: #007700">print </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: #FF8000">// Hello apple<br /><br />// This will not work, and will result in a parse error, such as:<br />// Parse error: parse error, expecting T_STRING' or T_VARIABLE' or T_NUM_STRING'<br />// This of course applies to using superglobals in strings as well<br /></span><span style="color: #007700">print </span><span style="color: #DD0000">"Hello </span><span style="color: #0000BB">$arr</span><span style="color: #007700">[</span><span style="color: #DD0000">'fruit']"</span><span style="color: #007700">;<br />print </span><span style="color: #DD0000">"Hello </span><span style="color: #0000BB">$_GET</span><span style="color: #007700">[</span><span style="color: #DD0000">'foo']"</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Concatenation is another option<br /></span><span style="color: #007700">print </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: #FF8000">// Hello apple<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

   <p class="para">
    When <a href="errorfunc.configuration.php#ini.error-reporting" class="link">error_reporting</a> is set to
    show <strong><code><a href="errorfunc.constants.php#constant.e-notice">E_NOTICE</a></code></strong> level errors (by setting it to
    <strong><code><a href="errorfunc.constants.php#constant.e-all">E_ALL</a></code></strong>, for example), such uses will become immediately
    visible. By default,
    <a href="errorfunc.configuration.php#ini.error-reporting" class="link">error_reporting</a> is set not to
    show notices.
   </p>

   <p class="para">
    As stated in the <a href="language.types.array.php#language.types.array.syntax" class="link">syntax</a>
    section, what&#039;s inside the square brackets (&#039;<code class="literal">[</code>&#039; and
    &#039;<code class="literal">]</code>&#039;) must be an expression. This means that code like
    this works:
   </p>

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

   </div>
   
   <p class="para">
    This is an example of using a function return value as the array index. PHP
    also knows about constants:
   </p>

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

   </div>
   
   <p class="para">
    Note that <strong><code><a href="errorfunc.constants.php#constant.e-error">E_ERROR</a></code></strong> is also a valid identifier, just like
    <code class="literal">bar</code> in the first example. But the last example is in fact
    the same as writing:
   </p>
  
   <div class="informalexample">
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$error_descriptions</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">] = </span><span style="color: #DD0000">"A fatal error has occurred"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$error_descriptions</span><span style="color: #007700">[</span><span style="color: #0000BB">2</span><span style="color: #007700">] = </span><span style="color: #DD0000">"PHP issued a warning"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$error_descriptions</span><span style="color: #007700">[</span><span style="color: #0000BB">8</span><span style="color: #007700">] = </span><span style="color: #DD0000">"This is just an informal notice"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
   
   <p class="para">
    because <strong><code><a href="errorfunc.constants.php#constant.e-error">E_ERROR</a></code></strong> equals <code class="literal">1</code>, etc.
   </p>

   <div class="sect4" id="language.types.array.foo-bar.why">
    <h5 class="title">So why is it bad then?</h5>

    <p class="para">
     At some point in the future, the PHP team might want to add another
     constant or keyword, or a constant in other code may interfere. For
     example, it is already wrong to use the words <code class="literal">empty</code> and
     <code class="literal">default</code> this way, since they are
     <a href="reserved.php" class="link">reserved keywords</a>.
    </p>

    <blockquote class="note"><p><strong class="note">Зауваження</strong>: 
     <span class="simpara">
      To reiterate, inside a double-quoted <span class="type"><a href="language.types.string.php" class="type string">string</a></span>, it&#039;s valid to
      not surround array indexes with quotes so <code class="literal">&quot;$foo[bar]&quot;</code>
      is valid. See the above examples for details on why as well as the section
      on <a href="language.types.string.php#language.types.string.parsing" class="link">variable parsing in
      strings</a>.
     </span>
    </p></blockquote>

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

 <div class="sect2" id="language.types.array.casting">
  <h3 class="title">Converting to array</h3>
  
  <p class="para">
   For any of the types <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> and <span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span>,
   converting a value to an <span class="type"><a href="language.types.array.php" class="type array">array</a></span> results in an array with a single
   element with index zero and the value of the scalar which was converted. In
   other words, <code class="code">(array) $scalarValue</code> is exactly the same as
   <code class="literal">array($scalarValue)</code>.
  </p>
  
  <p class="para">
   If an <span class="type"><a href="language.types.object.php" class="type object">object</a></span> is converted to an <span class="type"><a href="language.types.array.php" class="type array">array</a></span>, the result
   is an <span class="type"><a href="language.types.array.php" class="type array">array</a></span> whose elements are the <span class="type"><a href="language.types.object.php" class="type object">object</a></span>&#039;s
   properties. The keys are the member variable names, with a few notable
   exceptions: integer properties are unaccessible;
   private variables have the class name prepended to the variable
   name; protected variables have a &#039;*&#039; prepended to the variable name. These
   prepended values have <code class="literal">NUL</code> bytes on either side.
   Uninitialized <a href="language.oop5.properties.php#language.oop5.properties.typed-properties" class="link">typed properties</a>
   are silently discarded.
  </p>

  <div class="informalexample">
   <div class="example-contents">
    <div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">class </span><span style="color: #0000BB">A </span><span style="color: #007700">{<br />    private </span><span style="color: #0000BB">$B</span><span style="color: #007700">;<br />    protected </span><span style="color: #0000BB">$C</span><span style="color: #007700">;<br />    public </span><span style="color: #0000BB">$D</span><span style="color: #007700">;<br />    function </span><span style="color: #0000BB">__construct</span><span style="color: #007700">()<br />    {<br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;{</span><span style="color: #0000BB">1</span><span style="color: #007700">} = </span><span style="color: #0000BB">null</span><span style="color: #007700">;<br />    }<br />}<br /><br /></span><span style="color: #0000BB">var_export</span><span style="color: #007700">((array) new </span><span style="color: #0000BB">A</span><span style="color: #007700">());<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

   <p class="para">Поданий вище приклад
виведе:</p>
   <div class="example-contents screen">
    <div class="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">
   These <code class="literal">NUL</code> can result in some unexpected behaviour:
  </p>

  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">class </span><span style="color: #0000BB">A </span><span style="color: #007700">{<br />    private </span><span style="color: #0000BB">$A</span><span style="color: #007700">; </span><span style="color: #FF8000">// This will become '\0A\0A'<br /></span><span style="color: #007700">}<br /><br />class </span><span style="color: #0000BB">B </span><span style="color: #007700">extends </span><span style="color: #0000BB">A </span><span style="color: #007700">{<br />    private </span><span style="color: #0000BB">$A</span><span style="color: #007700">; </span><span style="color: #FF8000">// This will become '\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">// This will become 'AA'<br /></span><span style="color: #007700">}<br /><br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">((array) new </span><span style="color: #0000BB">B</span><span style="color: #007700">());<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

   <p class="para">Поданий вище приклад
виведе:</p>
   <div class="example-contents screen">
    <div class="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">
   The above will appear to have two keys named &#039;AA&#039;, although one of them is
   actually named &#039;\0A\0A&#039;.
  </p>
  
  <p class="para">
   Converting <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> to an <span class="type"><a href="language.types.array.php" class="type array">array</a></span> results in an empty
   <span class="type"><a href="language.types.array.php" class="type array">array</a></span>.
  </p>
 </div>

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

  <p class="para">
   It is possible to compare arrays with the <span class="function"><a href="function.array-diff.php" class="function">array_diff()</a></span>
   function and with
   <a href="language.operators.array.php" class="link">array operators</a>.
  </p>
 </div>

 <div class="sect2" id="language.types.array.unpacking">
  <h3 class="title">Array unpacking</h3>

  <p class="para">
   An array prefixed by <code class="code">...</code> will be expanded in place during array definition.
   Only arrays and objects which implement <span class="interfacename"><a href="class.traversable.php" class="interfacename">Traversable</a></span> can be expanded.
   Array unpacking with <code class="code">...</code> is available as of PHP 7.4.0.
  </p>

  <p class="para">
   It&#039;s possible to expand multiple times, and add normal elements before or after the <code class="code">...</code> operator:

   <div class="example" id="example-9">
    <p><strong>Приклад #9 Simple array unpacking</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// Using short array syntax.<br />// Also, works with array() syntax.<br /></span><span style="color: #0000BB">$arr1 </span><span style="color: #007700">= [</span><span style="color: #0000BB">1</span><span style="color: #007700">, </span><span style="color: #0000BB">2</span><span style="color: #007700">, </span><span style="color: #0000BB">3</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">$arr2 </span><span style="color: #007700">= [...</span><span style="color: #0000BB">$arr1</span><span style="color: #007700">]; </span><span style="color: #FF8000">//[1, 2, 3]<br /></span><span style="color: #0000BB">$arr3 </span><span style="color: #007700">= [</span><span style="color: #0000BB">0</span><span style="color: #007700">, ...</span><span style="color: #0000BB">$arr1</span><span style="color: #007700">]; </span><span style="color: #FF8000">//[0, 1, 2, 3]<br /></span><span style="color: #0000BB">$arr4 </span><span style="color: #007700">= [...</span><span style="color: #0000BB">$arr1</span><span style="color: #007700">, ...</span><span style="color: #0000BB">$arr2</span><span style="color: #007700">, </span><span style="color: #0000BB">111</span><span style="color: #007700">]; </span><span style="color: #FF8000">//[1, 2, 3, 1, 2, 3, 111]<br /></span><span style="color: #0000BB">$arr5 </span><span style="color: #007700">= [...</span><span style="color: #0000BB">$arr1</span><span style="color: #007700">, ...</span><span style="color: #0000BB">$arr1</span><span style="color: #007700">]; </span><span style="color: #FF8000">//[1, 2, 3, 1, 2, 3]<br /><br /></span><span style="color: #007700">function </span><span style="color: #0000BB">getArr</span><span style="color: #007700">() {<br />  return [</span><span style="color: #DD0000">'a'</span><span style="color: #007700">, </span><span style="color: #DD0000">'b'</span><span style="color: #007700">];<br />}<br /></span><span style="color: #0000BB">$arr6 </span><span style="color: #007700">= [...</span><span style="color: #0000BB">getArr</span><span style="color: #007700">(), </span><span style="color: #DD0000">'c' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'d'</span><span style="color: #007700">]; </span><span style="color: #FF8000">//['a', 'b', 'c' =&gt; 'd']<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </p>

  <p class="para">
   Unpacking an array with the <code class="code">...</code> operator follows the semantics of the <span class="function"><a href="function.array-merge.php" class="function">array_merge()</a></span> function.
   That is, later string keys overwrite earlier ones and integer keys are renumbered:

   <div class="example" id="example-10">
    <p><strong>Приклад #10 Array unpacking with duplicate key</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// string key<br /></span><span style="color: #0000BB">$arr1 </span><span style="color: #007700">= [</span><span style="color: #DD0000">"a" </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">1</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">$arr2 </span><span style="color: #007700">= [</span><span style="color: #DD0000">"a" </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">2</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">$arr3 </span><span style="color: #007700">= [</span><span style="color: #DD0000">"a" </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">0</span><span style="color: #007700">, ...</span><span style="color: #0000BB">$arr1</span><span style="color: #007700">, ...</span><span style="color: #0000BB">$arr2</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$arr3</span><span style="color: #007700">); </span><span style="color: #FF8000">// ["a" =&gt; 2]<br /><br />// integer key<br /></span><span style="color: #0000BB">$arr4 </span><span style="color: #007700">= [</span><span style="color: #0000BB">1</span><span style="color: #007700">, </span><span style="color: #0000BB">2</span><span style="color: #007700">, </span><span style="color: #0000BB">3</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">$arr5 </span><span style="color: #007700">= [</span><span style="color: #0000BB">4</span><span style="color: #007700">, </span><span style="color: #0000BB">5</span><span style="color: #007700">, </span><span style="color: #0000BB">6</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">$arr6 </span><span style="color: #007700">= [...</span><span style="color: #0000BB">$arr4</span><span style="color: #007700">, ...</span><span style="color: #0000BB">$arr5</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$arr6</span><span style="color: #007700">); </span><span style="color: #FF8000">// [1, 2, 3, 4, 5, 6]<br />// Which is [0 =&gt; 1, 1 =&gt; 2, 2 =&gt; 3, 3 =&gt; 4, 4 =&gt; 5, 5 =&gt; 6]<br />// where the original integer keys have not been retained.<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </p>

  <blockquote class="note"><p><strong class="note">Зауваження</strong>: 
   <p class="para">
    Keys that are neither integers nor strings throw a <span class="classname"><a href="class.typeerror.php" class="classname">TypeError</a></span>.
    Such keys can only be generated by a <span class="interfacename"><a href="class.traversable.php" class="interfacename">Traversable</a></span> object.
   </p>
  </p></blockquote>
  <blockquote class="note"><p><strong class="note">Зауваження</strong>: 
   <p class="para">
    Prior to PHP 8.1, unpacking an array which has a string key is not supported:
   </p>
   <div class="informalexample">
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br />$arr1 </span><span style="color: #007700">= [</span><span style="color: #0000BB">1</span><span style="color: #007700">, </span><span style="color: #0000BB">2</span><span style="color: #007700">, </span><span style="color: #0000BB">3</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">$arr2 </span><span style="color: #007700">= [</span><span style="color: #DD0000">'a' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">4</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">$arr3 </span><span style="color: #007700">= [...</span><span style="color: #0000BB">$arr1</span><span style="color: #007700">, ...</span><span style="color: #0000BB">$arr2</span><span style="color: #007700">];<br /></span><span style="color: #FF8000">// Fatal error: Uncaught Error: Cannot unpack array with string keys in example.php:5<br /><br /></span><span style="color: #0000BB">$arr4 </span><span style="color: #007700">= [</span><span style="color: #0000BB">1</span><span style="color: #007700">, </span><span style="color: #0000BB">2</span><span style="color: #007700">, </span><span style="color: #0000BB">3</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">$arr5 </span><span style="color: #007700">= [</span><span style="color: #0000BB">4</span><span style="color: #007700">, </span><span style="color: #0000BB">5</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">$arr6 </span><span style="color: #007700">= [...</span><span style="color: #0000BB">$arr4</span><span style="color: #007700">, ...</span><span style="color: #0000BB">$arr5</span><span style="color: #007700">]; </span><span style="color: #FF8000">// works. [1, 2, 3, 4, 5]<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

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

 </div>

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

  <p class="para">
   The array type in PHP is very versatile. Here are some examples:
  </p>

  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// This:<br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= array( </span><span style="color: #DD0000">'color' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'red'</span><span style="color: #007700">,<br />            </span><span style="color: #DD0000">'taste' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'sweet'</span><span style="color: #007700">,<br />            </span><span style="color: #DD0000">'shape' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'round'</span><span style="color: #007700">,<br />            </span><span style="color: #DD0000">'name'  </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'apple'</span><span style="color: #007700">,<br />            </span><span style="color: #0000BB">4        </span><span style="color: #FF8000">// key will be 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: #FF8000">// . . .is completely equivalent with this:<br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= array();<br /></span><span style="color: #0000BB">$a</span><span style="color: #007700">[</span><span style="color: #DD0000">'color'</span><span style="color: #007700">] = </span><span style="color: #DD0000">'red'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$a</span><span style="color: #007700">[</span><span style="color: #DD0000">'taste'</span><span style="color: #007700">] = </span><span style="color: #DD0000">'sweet'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$a</span><span style="color: #007700">[</span><span style="color: #DD0000">'shape'</span><span style="color: #007700">] = </span><span style="color: #DD0000">'round'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$a</span><span style="color: #007700">[</span><span style="color: #DD0000">'name'</span><span style="color: #007700">]  = </span><span style="color: #DD0000">'apple'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$a</span><span style="color: #007700">[]        = </span><span style="color: #0000BB">4</span><span style="color: #007700">;        </span><span style="color: #FF8000">// key will be 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">// After the above code is executed, $a will be the array<br />// array('color' =&gt; 'red', 'taste' =&gt; 'sweet', 'shape' =&gt; 'round', <br />// 'name' =&gt; 'apple', 0 =&gt; 4), and $b will be the array <br />// array(0 =&gt; 'a', 1 =&gt; 'b', 2 =&gt; 'c'), or simply array('a', 'b', 'c').<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>

  <div class="example" id="example-11">
   <p><strong>Приклад #11 Using array()</strong></p>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// Array as (property-)map<br /></span><span style="color: #0000BB">$map </span><span style="color: #007700">= array( </span><span style="color: #DD0000">'version'    </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">4</span><span style="color: #007700">,<br />              </span><span style="color: #DD0000">'OS'         </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'Linux'</span><span style="color: #007700">,<br />              </span><span style="color: #DD0000">'lang'       </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'english'</span><span style="color: #007700">,<br />              </span><span style="color: #DD0000">'short_tags' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">true<br />            </span><span style="color: #007700">);<br />            <br /></span><span style="color: #FF8000">// strictly numerical keys<br /></span><span style="color: #0000BB">$array </span><span style="color: #007700">= array( </span><span style="color: #0000BB">7</span><span style="color: #007700">,<br />                </span><span style="color: #0000BB">8</span><span style="color: #007700">,<br />                </span><span style="color: #0000BB">0</span><span style="color: #007700">,<br />                </span><span style="color: #0000BB">156</span><span style="color: #007700">,<br />                -</span><span style="color: #0000BB">10<br />              </span><span style="color: #007700">);<br /></span><span style="color: #FF8000">// this is the same as array(0 =&gt; 7, 1 =&gt; 8, ...)<br /><br /></span><span style="color: #0000BB">$switching </span><span style="color: #007700">= array(         </span><span style="color: #0000BB">10</span><span style="color: #007700">, </span><span style="color: #FF8000">// key = 0<br />                    </span><span style="color: #0000BB">5    </span><span style="color: #007700">=&gt;  </span><span style="color: #0000BB">6</span><span style="color: #007700">,<br />                    </span><span style="color: #0000BB">3    </span><span style="color: #007700">=&gt;  </span><span style="color: #0000BB">7</span><span style="color: #007700">, <br />                    </span><span style="color: #DD0000">'a'  </span><span style="color: #007700">=&gt;  </span><span style="color: #0000BB">4</span><span style="color: #007700">,<br />                            </span><span style="color: #0000BB">11</span><span style="color: #007700">, </span><span style="color: #FF8000">// key = 6 (maximum of integer-indices was 5)<br />                    </span><span style="color: #DD0000">'8'  </span><span style="color: #007700">=&gt;  </span><span style="color: #0000BB">2</span><span style="color: #007700">, </span><span style="color: #FF8000">// key = 8 (integer!)<br />                    </span><span style="color: #DD0000">'02' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">77</span><span style="color: #007700">, </span><span style="color: #FF8000">// key = '02'<br />                    </span><span style="color: #0000BB">0    </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">12  </span><span style="color: #FF8000">// the value 10 will be overwritten by 12<br />                  </span><span style="color: #007700">);<br />                  <br /></span><span style="color: #FF8000">// empty array<br /></span><span style="color: #0000BB">$empty </span><span style="color: #007700">= array();         <br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>

   </div>

  </div>

  <div class="example" id="language.types.array.examples.loop">
   <p><strong>Приклад #12 Collection</strong></p>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$colors </span><span style="color: #007700">= array(</span><span style="color: #DD0000">'red'</span><span style="color: #007700">, </span><span style="color: #DD0000">'blue'</span><span style="color: #007700">, </span><span style="color: #DD0000">'green'</span><span style="color: #007700">, </span><span style="color: #DD0000">'yellow'</span><span style="color: #007700">);<br /><br />foreach (</span><span style="color: #0000BB">$colors </span><span style="color: #007700">as </span><span style="color: #0000BB">$color</span><span style="color: #007700">) {<br />    echo </span><span style="color: #DD0000">"Do you like </span><span style="color: #0000BB">$color</span><span style="color: #DD0000">?\n"</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

   <div class="example-contents"><p>Поданий вище приклад
виведе:</p></div>
   <div class="example-contents screen">
<div class="cdata"><pre>
Do you like red?
Do you like blue?
Do you like green?
Do you like yellow?
</pre></div>
   </div>
  </div>
  
  <p class="para">
   Changing the values of the <span class="type"><a href="language.types.array.php" class="type array">array</a></span> directly is possible
   by passing them by reference.
  </p>

  <div class="example" id="language.types.array.examples.changeloop">
   <p><strong>Приклад #13 Changing element in the loop</strong></p>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">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">/* ensure that following writes to<br />$color will not modify the last array element */<br /><br /></span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">$colors</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

   <div class="example-contents"><p>Поданий вище приклад
виведе:</p></div>
   <div class="example-contents screen">
<div class="cdata"><pre>
Array
(
    [0] =&gt; RED
    [1] =&gt; BLUE
    [2] =&gt; GREEN
    [3] =&gt; YELLOW
)
</pre></div>
   </div>
  </div>

  <p class="para">
   This example creates a one-based array.
  </p>

  <div class="example" id="example-12">
   <p><strong>Приклад #14 One-based index</strong></p>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$firstquarter  </span><span style="color: #007700">= array(</span><span style="color: #0000BB">1 </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'January'</span><span style="color: #007700">, </span><span style="color: #DD0000">'February'</span><span style="color: #007700">, </span><span style="color: #DD0000">'March'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">$firstquarter</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

   <div class="example-contents"><p>Поданий вище приклад
виведе:</p></div>
   <div class="example-contents screen">
<div class="cdata"><pre>
Array 
(
    [1] =&gt; &#039;January&#039;
    [2] =&gt; &#039;February&#039;
    [3] =&gt; &#039;March&#039;
)
</pre></div>   
   </div>
  </div>

  <div class="example" id="example-13">
   <p><strong>Приклад #15 Filling an array</strong></p>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// fill an array with all items from a directory<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 /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>

  <p class="para">
   <span class="type"><a href="language.types.array.php" class="type Array">Array</a></span>s are ordered. The order can be changed using various
   sorting functions. See the <a href="ref.array.php" class="link">array functions</a>
   section for more information. The <span class="function"><a href="function.count.php" class="function">count()</a></span> function can be
   used to count the number of items in an <span class="type"><a href="language.types.array.php" class="type array">array</a></span>.
  </p>

  <div class="example" id="example-14">
   <p><strong>Приклад #16 Sorting an array</strong></p>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />sort</span><span style="color: #007700">(</span><span style="color: #0000BB">$files</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">$files</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>

  <p class="para">
   Because the value of an <span class="type"><a href="language.types.array.php" class="type array">array</a></span> can be anything, it can also be
   another <span class="type"><a href="language.types.array.php" class="type array">array</a></span>. This enables the creation of recursive and
   multi-dimensional <span class="type"><a href="language.types.array.php" class="type array">array</a></span>s.
  </p>

  <div class="example" id="example-15">
   <p><strong>Приклад #17 Recursive and multi-dimensional arrays</strong></p>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$fruits </span><span style="color: #007700">= array ( </span><span style="color: #DD0000">"fruits"  </span><span style="color: #007700">=&gt; array ( </span><span style="color: #DD0000">"a" </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">"orange"</span><span style="color: #007700">,<br />                                       </span><span style="color: #DD0000">"b" </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">"banana"</span><span style="color: #007700">,<br />                                       </span><span style="color: #DD0000">"c" </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">"apple"<br />                                     </span><span style="color: #007700">),<br />                  </span><span style="color: #DD0000">"numbers" </span><span style="color: #007700">=&gt; array ( </span><span style="color: #0000BB">1</span><span style="color: #007700">,<br />                                       </span><span style="color: #0000BB">2</span><span style="color: #007700">,<br />                                       </span><span style="color: #0000BB">3</span><span style="color: #007700">,<br />                                       </span><span style="color: #0000BB">4</span><span style="color: #007700">,<br />                                       </span><span style="color: #0000BB">5</span><span style="color: #007700">,<br />                                       </span><span style="color: #0000BB">6<br />                                     </span><span style="color: #007700">),<br />                  </span><span style="color: #DD0000">"holes"   </span><span style="color: #007700">=&gt; array (      </span><span style="color: #DD0000">"first"</span><span style="color: #007700">,<br />                                       </span><span style="color: #0000BB">5 </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">"second"</span><span style="color: #007700">,<br />                                            </span><span style="color: #DD0000">"third"<br />                                     </span><span style="color: #007700">)<br />                );<br /><br /></span><span style="color: #FF8000">// Some examples to address values in the array above <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">// prints "second"<br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">$fruits</span><span style="color: #007700">[</span><span style="color: #DD0000">"fruits"</span><span style="color: #007700">][</span><span style="color: #DD0000">"a"</span><span style="color: #007700">]; </span><span style="color: #FF8000">// prints "orange"<br /></span><span style="color: #007700">unset(</span><span style="color: #0000BB">$fruits</span><span style="color: #007700">[</span><span style="color: #DD0000">"holes"</span><span style="color: #007700">][</span><span style="color: #0000BB">0</span><span style="color: #007700">]);  </span><span style="color: #FF8000">// remove "first"<br /><br />// Create a new multi-dimensional array<br /></span><span style="color: #0000BB">$juices</span><span style="color: #007700">[</span><span style="color: #DD0000">"apple"</span><span style="color: #007700">][</span><span style="color: #DD0000">"green"</span><span style="color: #007700">] = </span><span style="color: #DD0000">"good"</span><span style="color: #007700">; <br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>

  <p class="para">
   <span class="type"><a href="language.types.array.php" class="type Array">Array</a></span> assignment always involves value copying. Use the
   <a href="language.operators.php" class="link">reference operator</a> to copy an
   <span class="type"><a href="language.types.array.php" class="type array">array</a></span> by reference.
  </p>

  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$arr1 </span><span style="color: #007700">= array(</span><span style="color: #0000BB">2</span><span style="color: #007700">, </span><span style="color: #0000BB">3</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$arr2 </span><span style="color: #007700">= </span><span style="color: #0000BB">$arr1</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$arr2</span><span style="color: #007700">[] = </span><span style="color: #0000BB">4</span><span style="color: #007700">; </span><span style="color: #FF8000">// $arr2 is changed,<br />             // $arr1 is still 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">// now $arr1 and $arr3 are the same<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>

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