ΠœΠ°ΡΡΠΈΠ²Ρ‹

Бписок Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с массивами доступСн Π² Π³Π»Π°Π²Π΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Β«Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с массивами».

Массив Π² PHP β€” упорядочСнная структура Π΄Π°Π½Π½Ρ‹Ρ…, которая связываСт значСния ΠΈ ΠΊΠ»ΡŽΡ‡ΠΈ. Π­Ρ‚ΠΎΡ‚ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ для Ρ€Π°Π·Π½Ρ‹Ρ… Ρ†Π΅Π»Π΅ΠΉ, поэтому с Π½ΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΊΠ°ΠΊ с массивом, списком (Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠΌ), Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΉ (Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ ΠΊΠ°Ρ€Ρ‚Ρ‹), словарём, ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠ΅ΠΉ, стСком, ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒΡŽ ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ‡Π΅ΠΌ-Ρ‚ΠΎ Π΅Ρ‰Ρ‘. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ значСниями массива Π±Ρ‹Π²Π°ΡŽΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ массивы, Ρ‚Π°ΠΊΠΆΠ΅ доступны Π΄Π΅Ρ€Π΅Π²ΡŒΡ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы.

ОбъяснСниС структур Π΄Π°Π½Π½Ρ‹Ρ… Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π° Ρ€Π°ΠΌΠΊΠΈ руководства, Π½ΠΎ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ приводится для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Π½ΠΈΡ…. Π—Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎΠ±Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ ΠΊ Π±ΠΎΠ»ΡŒΡˆΠΎΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΌΡƒ Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹ ΠΏΠΎ этой ΠΎΠ±ΡˆΠΈΡ€Π½ΠΎΠΉ Ρ‚Π΅ΠΌΠ΅.

Бинтаксис

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ массива Ρ‡Π΅Ρ€Π΅Π· ΡΠ·Ρ‹ΠΊΠΎΠ²ΡƒΡŽ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ array()

Массив (array) ΡΠΎΠ·Π΄Π°ΡŽΡ‚ языковой конструкциСй array(). ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΊΠ°ΠΊ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ΅ количСство Ρ€Π°Π·Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Ρ… запятыми ΠΏΠ°Ρ€ ΠΊΠ»ΡŽΡ‡ => Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

array(
    key  => value,
    key2 => value2,
    key3 => value3,
    ...
)

Запятая послС послСднСго элСмСнта массива Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Π°; пропуск ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΉ запятой Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ошибок. ΠšΠΎΠ½Π΅Ρ‡Π½ΡƒΡŽ Π·Π°ΠΏΡΡ‚ΡƒΡŽ часто ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ Π² опрСдСлСниях однострочных массивов, β€” Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Π΅ΡΡ‚ΡŒ array(1, 2) вмСсто array(1, 2, ). Для многострочных массивов, Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, часто ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΊΠΎΠ½Π΅Ρ‡Π½ΡƒΡŽ Π·Π°ΠΏΡΡ‚ΡƒΡŽ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²Ρ‹Ρ… элСмСнтов Π² ΠΊΠΎΠ½Π΅Ρ† массива.

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅:

PHP ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ синтаксис массива, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ замСняСт ΡΠ·Ρ‹ΠΊΠΎΠ²ΡƒΡŽ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ array() Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ [].

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #1 ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ массив

<?php

$array1
= array(
"foo" => "bar",
"bar" => "foo",
);

// Π Π°Π±ΠΎΡ‚Π° с ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΌ синтаксисом массива
$array2 = [
"foo" => "bar",
"bar" => "foo",
];

var_dump($array1, $array2);

Π’ PHP массивы ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ цСлочислСнныС (int) ΠΈ строковыС (string) ΠΊΠ»ΡŽΡ‡ΠΈ. Π’ΠΈΠΏ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π½Π΅ ограничиваСтся.

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ прСобразования ΠΊΠ»ΡŽΡ‡Π°:

  • Π‘Ρ‚Ρ€ΠΎΠΊΠΈ (string), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ содСрТат Ρ†Π΅Π»ΠΎΠ΅ число (int), ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ΡΡ Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ int, Ссли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π΅Π΄ числом Π½Π΅ ΡƒΠΊΠ°Π·Π°Π»ΠΈ Π·Π½Π°ΠΊ +. НапримСр, ΠΊΠ»ΡŽΡ‡ со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ "8" сохранится со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ 8. ΠŸΡ€ΠΈ этом Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ "08" Π½Π΅ прСобразуСтся, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½Π΅ относится ΠΊ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌ дСсятичным Ρ†Π΅Π»Ρ‹ΠΌ.
  • Числа с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ (float) Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ΡΡ Π² цСлочислСнныС значСния int β€” дробная Ρ‡Π°ΡΡ‚ΡŒ отбрасываСтся. НапримСр, ΠΊΠ»ΡŽΡ‡ со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ 8.7 сохранится ΠΊΠ°ΠΊ 8.
  • ЗначСния с Ρ‚ΠΈΠΏΠΎΠΌ bool Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ΡΡ Π² цСлочислСнный Ρ‚ΠΈΠΏ int. НапримСр, ΠΊΠ»ΡŽΡ‡ со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ true сохранится ΠΊΠ°ΠΊ 1, Π° ΠΊΠ»ΡŽΡ‡ со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ false β€” ΠΊΠ°ΠΊ 0.
  • Π’ΠΈΠΏ null прСобразуСтся Π² ΠΏΡƒΡΡ‚ΡƒΡŽ строку. НапримСр, ΠΊΠ»ΡŽΡ‡ со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ null сохранится ΠΊΠ°ΠΊ "".
  • ΠœΠ°ΡΡΠΈΠ²Ρ‹ (array) ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ (object) нСльзя ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΊΠ»ΡŽΡ‡ΠΈ. Π­Ρ‚ΠΎ сгСнСрируСт ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅: Illegal offset type.

PHP пСрСзаписываСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ элСмСнта, Ссли встрСчаСт Π² объявлСнии массива ΠΏΠΎΠ²Ρ‚ΠΎΡ€ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ ΠΊΠ»ΡŽΡ‡Π°, поэтому Π² массивС остаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послСдний Ρ‚Π°ΠΊΠΎΠΉ элСмСнт.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #2 ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² ΠΈ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΡŒ элСмСнтов

<?php

$array
= array(
1 => "a",
"1" => "b",
1.5 => "c",
true => "d",
);

var_dump($array);

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°:

array(1) {
  [1]=>
  string(1) "d"
}

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ приводится ΠΊ 1, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ пСрСзаписываСтся Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π½ΠΎΠ²ΠΎΠΌ элСмСнтС, ΠΈ останСтся СдинствСнноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ "d", ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΠ»ΠΎΡΡŒ послСдним.

PHP Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ массивам ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ цСлочислСнныС (int) ΠΈ строковыС (string) ΠΊΠ»ΡŽΡ‡ΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ PHP ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ воспринимаСт индСксныС ΠΈ ассоциативныС массивы.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #3 Π‘ΠΌΠ΅ΡˆΠ°Π½Π½Ρ‹Π΅ цСлочислСнныС (int) ΠΈ строковыС (string) ΠΊΠ»ΡŽΡ‡ΠΈ

<?php

$array
= array(
"foo" => "bar",
"bar" => "foo",
100 => -100,
-
100 => 100,
);
var_dump($array);

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°:

array(4) {
  ["foo"]=>
  string(3) "bar"
  ["bar"]=>
  string(3) "foo"
  [100]=>
  int(-100)
  [-100]=>
  int(100)
}

ΠšΠ»ΡŽΡ‡ нСобязатСлСн: ΠΊΠ»ΡŽΡ‡ΠΎΠΌ Π½ΠΎΠ²ΠΎΠ³ΠΎ элСмСнта, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π΅ ΡƒΠΊΠ°Π·Π°Π»ΠΈ ΠΊΠ»ΡŽΡ‡, станСт ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΉ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ наибольший цСлочислСнный (int) ΠΊΠ»ΡŽΡ‡.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #4 Π˜Π½Π΄Π΅ΠΊΡΠ½Ρ‹Π΅ массивы Π±Π΅Π· ΠΊΠ»ΡŽΡ‡Π°

<?php

$array
= array("foo", "bar", "hallo", "world");
var_dump($array);

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°:

array(4) {
  [0]=>
  string(3) "foo"
  [1]=>
  string(3) "bar"
  [2]=>
  string(5) "hallo"
  [3]=>
  string(5) "world"
}

Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡ ΠΎΠ΄Π½ΠΈΠΌ элСмСнтам ΠΈ ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ для Π΄Ρ€ΡƒΠ³ΠΈΡ…:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #5 ΠšΠ»ΡŽΡ‡ΠΈ для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… элСмСнтов

<?php

$array
= array(
"a",
"b",
6 => "c",
"d",
);
var_dump($array);

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°:

array(4) {
  [0]=>
  string(1) "a"
  [1]=>
  string(1) "b"
  [6]=>
  string(1) "c"
  [7]=>
  string(1) "d"
}

Π’ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ послСднСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ "d" ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΠ»ΠΎΡΡŒ ΠΊΠ»ΡŽΡ‡Ρƒ 7. Π­Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ этим самым большим Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ цСлочислСнного ΠΊΠ»ΡŽΡ‡Π° Π±Ρ‹Π»ΠΎ 6.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #6 Π Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ прСобразования Ρ‚ΠΈΠΏΠΎΠ² ΠΈ пСрСзаписи элСмСнтов

ΠŸΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ всС привСдСния Ρ‚ΠΈΠΏΠΎΠ² ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΈ пСрСзаписи элСмСнтов.

<?php

$array
= array(
1 => 'a',
'1' => 'b', // Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ "b" ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡˆΠ΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ "a"
1.5 => 'c', // Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ "c" ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡˆΠ΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ "b"
-1 => 'd',
'01' => 'e', // Π‘Ρ‚Ρ€ΠΎΠΊΠ° НЕ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡˆΠ΅Ρ‚ ΠΊΠ»ΡŽΡ‡ 1, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½Π° Π½Π΅ цСлочислСнная
'1.5' => 'f', // Π‘Ρ‚Ρ€ΠΎΠΊΠ° НЕ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡˆΠ΅Ρ‚ ΠΊΠ»ΡŽΡ‡ 1, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½Π° Π½Π΅ цСлочислСнная
true => 'g', // Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ "g" ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡˆΠ΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ "c"
false => 'h',
'' => 'i',
null => 'j', // Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ "j" ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡˆΠ΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ "i"
'k', // Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ "k" присваиваСтся ΠΊΠ»ΡŽΡ‡Ρƒ 2, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ самый большой цСлочислСнный ΠΊΠ»ΡŽΡ‡ Π΄ΠΎ этого Π±Ρ‹Π» 1
2 => 'l', // Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ "l" ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡˆΠ΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ "k"
);

var_dump($array);

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°:

array(7) {
  [1]=>
  string(1) "g"
  [-1]=>
  string(1) "d"
  ["01"]=>
  string(1) "e"
  ["1.5"]=>
  string(1) "f"
  [0]=>
  string(1) "h"
  [""]=>
  string(1) "j"
  [2]=>
  string(1) "l"
}

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #7 ΠžΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ индСксы

ΠŸΡ€ΠΈ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ цСлочислСнного ΠΊΠ»ΡŽΡ‡Π° n, PHP позаботится ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠ»ΡŽΡ‡ n + 1.

<?php

$array
= [];

$array[-5] = 1;
$array[] = 2;

var_dump($array);

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°:

array(2) {
  [-5]=>
  int(1)
  [-4]=>
  int(2)
}
Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅

Π”ΠΎ PHP 8.3.0 Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ цСлочислСнного ΠΊΠ»ΡŽΡ‡Π° n присвоило Π±Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΠΊΠ»ΡŽΡ‡Ρƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0, поэтому ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π²Ρ‹Π²Π΅Π» Π±Ρ‹:

array(2) {
  [-5]=>
  int(1)
  [0]=>
  int(2)
}

Доступ ΠΊ элСмСнтам массива Ρ‡Π΅Ρ€Π΅Π· синтаксис ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобок

Доступ ΠΊ элСмСнтам массива ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ синтаксисом array[key].

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #8 Доступ ΠΊ элСмСнтам массива

<?php

$array
= array(
"foo" => "bar",
42 => 24,
"multi" => array(
"dimensional" => array(
"array" => "foo"
)
)
);

var_dump($array["foo"]);
var_dump($array[42]);
var_dump($array["multi"]["dimensional"]["array"]);

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°:

string(3) "bar"
int(24)
string(3) "foo"

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅:

Π”ΠΎ PHP 8.0.0 ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ ΠΈ Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки ΠΌΠΎΠ³Π»ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ·Π°ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΏΡ€ΠΈ доступС ΠΊ элСмСнтам массива (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ $array[42] ΠΈ $array{42} Π΄Π΅Π»Π°Π»ΠΈ ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅). Бинтаксис Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобок устарСл с PHP 7.4.0 ΠΈ большС Π½Π΅ поддСрТиваСтся с PHP 8.0.0.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #9 Π Π°Π·Ρ‹ΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ массива

<?php

function getArray()
{
return array(
1, 2, 3);
}

$secondElement = getArray()[1];

var_dump($secondElement);

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅:

ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° доступа ΠΊ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΌΡƒ ΠΊΠ»ΡŽΡ‡Ρƒ Π² массивС β€” Ρ‚ΠΎ ΠΆΠ΅, Ρ‡Ρ‚ΠΎ ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° доступа ΠΊ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ: выдаётся ошибка уровня E_WARNING ΠΈΠ»ΠΈ Π΄ΠΎ PHP 8.0.0 ошибка уровня E_NOTICE, ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ равняСтся null.

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅:

ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° Ρ€Π°Π·Ρ‹ΠΌΠ΅Π½ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ массив, Π° скалярноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ отличаСтся ΠΎΡ‚ строки (string), отдаст null, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Ρ€Π°Π·Ρ‹ΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ значСния string Ρ‚Ρ€Π°ΠΊΡ‚ΡƒΠ΅Ρ‚ строку ΠΊΠ°ΠΊ индСксный массив. ΠŸΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ Π΄ΠΎ PHP 7.4.0 Π½Π΅ Π²Ρ‹Π΄Π°Π²Π°Π»ΠΎΡΡŒ сообщСниС ΠΎΠ± ошибкС. Π‘ PHP 7.4.0 выдаётся ошибка уровня E_NOTICE; с PHP 8.0.0 выдаётся ошибка уровня E_WARNING.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈΠ»ΠΈ модификация массива синтаксисом ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобок

Массив Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΡƒΡ‚Ρ‘ΠΌ явной установки Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.

ΠŸΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅ Ρ‡Π΅Ρ€Π΅Π· ΠΊΠ»ΡŽΡ‡ Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобках установит Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ массива (array), Π° ΠΏΠ°Ρ€Π° пустых скобок [] Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

    $arr[key] = value;
    $arr[] = value;
    // Π’ ΠΊΠ»ΡŽΡ‡Π΅ key ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ значСния Ρ‚ΠΈΠΏΠΎΠ² int ΠΈΠ»ΠΈ string,
    // Π° Π² элСмСнтС value β€” значСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°
   

PHP создаст Π½ΠΎΠ²Ρ‹ΠΉ массив, Ссли ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ $arr Π΅Ρ‰Ρ‘ Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ ΠΈΠ»ΠΈ присвоили ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ null ΠΈΠ»ΠΈ false, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ это Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ способ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ массив array. Однако ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ массив Ρ‚Π°ΠΊΠΈΠΌΠΈ способом Π½Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽΡ‚, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ссли пСрСмСнная $arr ΡƒΠΆΠ΅ содСрТит Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ string-ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ сСтСвого запроса, это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Π½Π΅ измСнится ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ, ΠΈΠ»ΠΈ инструкция [] интСрпрСтируСтся ΠΊΠ°ΠΊ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ доступа ΠΊ символу Π² строкС. Π›ΡƒΡ‡ΡˆΠ΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ прямым присваиваниСм.

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Начиная с PHP 7.1.0 ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ пустого индСкса Π½Π° строкС выбросит Ρ„Π°Ρ‚Π°Π»ΡŒΠ½ΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ. РаньшС строка ΠΌΠΎΠ»Ρ‡Π° ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Π»Π°ΡΡŒ Π² массив.

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Π‘ PHP 8.1.0 способ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ создавали Π½ΠΎΠ²Ρ‹ΠΉ массив ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ ΠΊ Π½Π΅ΠΌΡƒ значСния false, устарСл. Бпособ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ Π½ΠΎΠ²Ρ‹ΠΉ массив ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ ΠΊ Π½Π΅ΠΌΡƒ значСния null ΠΈ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ значСния, ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ доступСн.

Для измСнСния ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ значСния ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΊΠ»ΡŽΡ‡ элСмСнта ΠΈ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°ΡŽΡ‚ Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. ΠŸΠ°Ρ€Ρƒ Β«ΠΊΠ»ΡŽΡ‡ β€” Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅Β» ΡƒΠ΄Π°Π»ΡΡŽΡ‚ языковой конструкциСй unset().

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #10 Π Π°Π±ΠΎΡ‚Π° с массивами Ρ‡Π΅Ρ€Π΅Π· ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ скобки

<?php

$arr
= array(5 => 1, 12 => 2);

$arr[] = 56; // Π’ этом мСстС скрипта Ρ‚Π°ΠΊΠΎΠ΅ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ
// ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡŽ $arr[13] = 56;

$arr["x"] = 42; // Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² массив Π½ΠΎΠ²ΠΎΠ³ΠΎ
// элСмСнта с ΠΊΠ»ΡŽΡ‡ΠΎΠΌ "x"

unset($arr[5]); // Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ элСмСнта ΠΈΠ· массива

var_dump($arr);

unset(
$arr); // ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ удаляСт вСсь массив

var_dump($arr);

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Если ΠΊΠ»ΡŽΡ‡ Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½, Π½ΠΎΠ²Ρ‹ΠΌ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ станСт ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ цСлочислСнный индСкс + 1. Если Π² массивС Π½Π΅Ρ‚ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… цСлочислСнных индСксов, ΠΊΠ»ΡŽΡ‡ΠΎΠΌ станСт 0. Начиная с PHP 8.3.0 это Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅ число.

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с массивами ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ наибольший цСлочислСнный ΠΊΠ»ΡŽΡ‡, Π½Π° основС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ вычисляСтся Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡, Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ содСрТится Π² массивС Π² Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚. PHP вычислит Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ Π½Π° основС наибольшСго цСлочислСнного ΠΊΠ»ΡŽΡ‡Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ появлялся Π² массивС с ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° послСднСй пСрСиндСксации. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ это ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚:

<?php

// Π‘ΠΎΠ·Π΄Π°Ρ‘ΠΌ простой массив.
$array = array(1, 2, 3, 4, 5);
print_r($array);

// Π’Π΅ΠΏΠ΅Ρ€ΡŒ удаляСм ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт, Π½ΠΎ массив оставляСм Π½Π΅Ρ‚Ρ€ΠΎΠ½ΡƒΡ‚Ρ‹ΠΌ:
foreach ($array as $i => $value) {
unset(
$array[$i]);
}
print_r($array);

// ДобавляСм элСмСнт (ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π½ΠΎΠ²Ρ‹ΠΌ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ станСт 5, Π° Π½Π΅ 0).
$array[] = 6;
print_r($array);

// ΠŸΠ΅Ρ€Π΅ΠΈΠ½Π΄Π΅ΠΊΡΠ°Ρ†ΠΈΡ:
$array = array_values($array);
$array[] = 7;
print_r($array);

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°:

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
)
Array
(
)
Array
(
    [5] => 6
)
Array
(
    [0] => 6
    [1] => 7
)

ДСструктуризация массива

ΠœΠ°ΡΡΠΈΠ²Ρ‹ Π΄Π΅ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ΠΈΡ€ΡƒΡŽΡ‚ языковыми конструкциями [] (начиная с PHP 7.1.0) ΠΈΠ»ΠΈ list(). Π­Ρ‚ΠΈ языковыС конструкции Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для дСструктуризации массива Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #11 ДСструктуризация массива

<?php

$source_array
= ['foo', 'bar', 'baz'];
[
$foo, $bar, $baz] = $source_array;
echo
$foo, PHP_EOL; // Π’Ρ‹Π²Π΅Π΄Π΅Ρ‚ "foo"
echo $bar, PHP_EOL; // Π’Ρ‹Π²Π΅Π΄Π΅Ρ‚ "bar"
echo $baz, PHP_EOL; // Π’Ρ‹Π²Π΅Π΄Π΅Ρ‚ "baz"

Π”Π΅ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ΠΈΠ·Π°Ρ†ΠΈΡŽ массива Ρ‚Π°ΠΊΠΆΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ Π² конструкции foreach для дСструктуризации ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива Π²ΠΎ врСмя ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ массиву.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #12 ДСструктуризация массива Π² конструкции foreach

<?php

$source_array
= [
[
1, 'John'],
[
2, 'Jane'],
];

foreach (
$source_array as [$id, $name]) {
echo
"{$id}: '{$name}'\n";
}

ДСструктуризация ΠΏΡ€ΠΎΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅Ρ‚ элСмСнты массива, для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅ ΡƒΠΊΠ°Π·Π°Π»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ. ДСструктуризация массива начинаСтся с индСкса 0.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #13 Π˜Π³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ элСмСнтов

<?php

$source_array
= ['foo', 'bar', 'baz'];

// ΠŸΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅ элСмСнта с индСксом 2 ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ $baz
[, , $baz] = $source_array;

echo
$baz; // Π’Ρ‹Π²Π΅Π΄Π΅Ρ‚ "baz"

Начиная с PHP 7.1.0 поддСрТиваСтся дСструктуризация ассоциативных массивов. Π­Ρ‚ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Π²Ρ‹Π±ΠΎΡ€ элСмСнта Π² массивах с числовым индСксом, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ явно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ индСкс.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #14 ДСструктуризация ассоциативных массивов

<?php

$source_array
= ['foo' => 1, 'bar' => 2, 'baz' => 3];

// ΠŸΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅ элСмСнта с индСксом 'baz' ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ $three
['baz' => $three] = $source_array;

echo
$three, PHP_EOL; // Π’Ρ‹Π²Π΅Π΄Π΅Ρ‚ 3

$source_array = ['foo', 'bar', 'baz'];

// ΠŸΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅ элСмСнта с индСксом 2 ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ $baz
[2 => $baz] = $source_array;

echo
$baz, PHP_EOL; // Π’Ρ‹Π²Π΅Π΄Π΅Ρ‚ "baz"

Массив Π΄Π΅ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ΠΈΡ€ΡƒΡŽΡ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ Π΄Π²Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ мСстами.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #15 ΠŸΠ΅Ρ€Π΅ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π΄Π²ΡƒΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…

<?php

$a
= 1;
$b = 2;
[
$b, $a] = [$a, $b];
echo
$a, PHP_EOL; // Π’Ρ‹Π²Π΅Π΄Π΅Ρ‚ 2
echo $b, PHP_EOL; // Π’Ρ‹Π²Π΅Π΄Π΅Ρ‚ 1

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅:

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ... Π½Π΅ поддСрТиваСтся Π² присваиваниях.

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅:

ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΌΡƒ ΠΊΠ»ΡŽΡ‡Ρƒ массива Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Π° ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΡŽ ΠΊ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ: выдаётся сообщСниС ΠΎΠ± ошибкС уровня E_WARNING, ΠΈΠ»ΠΈ ошибки уровня E_NOTICE Π΄ΠΎ PHP 8.0.0, Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ становится Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ null.

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅:

ДСструктуризация скалярного значСния присваиваСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ null ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² Π»Π΅Π²ΠΎΠΉ части выраТСния присваивания.

ΠŸΠΎΠ»Π΅Π·Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с массивами Π΅ΡΡ‚ΡŒ довольного ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎΠ± этом рассказано Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Β«Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с массивами».

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅:

Языковая конструкция unset() ΡƒΠΌΠ΅Π΅Ρ‚ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ ΠΊΠ»ΡŽΡ‡ΠΈ массива. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ массив НЕ пСрСиндСксируСтся. Массив ΠΏΠ΅Ρ€Π΅ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΡƒΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ array_values(), Ссли трСбуСтся ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² стилС Β«ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΈ ΡΠ΄Π²ΠΈΠ½ΡƒΡ‚ΡŒΒ».

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #16 Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… элСмСнтов

<?php

$a
= array(1 => 'ΠΎΠ΄ΠΈΠ½', 2 => 'Π΄Π²Π°', 3 => 'Ρ‚Ρ€ΠΈ');

/* Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ элСмСнта ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ массив Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ Π΅Π³ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ Ρ‚Π°ΠΊ:
$a = array(1 => 'ΠΎΠ΄ΠΈΠ½', 3 => 'Ρ‚Ρ€ΠΈ');
Π½ΠΎ НЕ Ρ‚Π°ΠΊ:
$a = array(1 => 'ΠΎΠ΄ΠΈΠ½', 2 => 'Ρ‚Ρ€ΠΈ');
*/
unset($a[2]);
var_dump($a);

$b = array_values($a);
// Π’Π΅ΠΏΠ΅Ρ€ΡŒ пСрСмСнная $b содСрТит array(0 => 'ΠΎΠ΄ΠΈΠ½', 1 => 'Ρ‚Ρ€ΠΈ')
var_dump($b);

Π£ΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π°Ρ конструкция foreach появилась Π² языкС для ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° массивов. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ простой способ ΠΎΠ±Ρ…ΠΎΠ΄Π° массива.

Π§Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈ нСльзя Π΄Π΅Π»Π°Ρ‚ΡŒ с массивами

ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ $foo[bar] Π½Π΅Π²Π΅Ρ€Π½ΠΎ?

Π‘Ρ‚Ρ€ΠΎΠΊΠΎΠ²Ρ‹ΠΉ Π»ΠΈΡ‚Π΅Ρ€Π°Π» Π² индСксС ассоциативного массива Π»ΡƒΡ‡ΡˆΠ΅ Π±Ρ€Π°Ρ‚ΡŒ Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ. НапримСр, ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ $foo['bar'], Π° Π½Π΅ $foo[bar]. Но ΠΏΠΎΡ‡Π΅ΠΌΡƒ? Π‘ старых скриптах часто встрСчаСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ синтаксис:

<?php

$foo
[bar] = 'Π²Ρ€Π°Π³';
echo
$foo[bar];
// ΠΈ Ρ‚. Π΄.

ΠΠ΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡ Π±Π΅Π· ΠΊΠ°Π²Ρ‹Ρ‡Π΅ΠΊ, хотя Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΈ Π½Π΅Π·Π°ΠΊΠ°Π²Ρ‹Ρ‡Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π° ΠΊΠ°ΠΊ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΉ константы bar, Π° Π½Π΅ строки 'bar' β€” Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π° Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°Ρ…. Код Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈΠ·-Π·Π° автоматичСского прСобразования Β«Π³ΠΎΠ»ΠΎΠΉ строки» β€” строки Π±Π΅Π· ΠΊΠ°Π²Ρ‹Ρ‡Π΅ΠΊ, которая Π½Π΅ соотвСтствуСт Π½ΠΈ ΠΎΠ΄Π½ΠΎΠΌΡƒ извСстному символу, β€” Π² строку со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚Π°ΠΊΠΎΠΉ Β«Π³ΠΎΠ»ΠΎΠΉ строки». PHP подставит вмСсто bar строку 'bar', Ссли Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ области видимости нСдоступна константа с Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ bar.

Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅

Π Π΅Π·Π΅Ρ€Π²Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΉ константы ΠΊΠ°ΠΊ пустой строки Π²Ρ‹Π΄Π°Ρ‘Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ уровня E_NOTICE. Начиная с PHP 7.2.0 ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ объявлСно ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΌ ΠΈ Π²Ρ‹Π΄Π°Ρ‘Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ уровня E_WARNING. Начиная с PHP 8.0.0 ΡƒΠ΄Π°Π»Π΅Π½ΠΎ ΠΈ выбрасываСт ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Error.

Π­Ρ‚ΠΎ Π½Π΅ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡. Π’ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ Π½Π΅ Π±Π΅Ρ€ΡƒΡ‚ константы ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π·Π°ΠΊΠ°Π²Ρ‹Ρ‡ΠΈΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠΌΠ΅ΡˆΠ°Π΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΈ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #17 Π—Π°ΠΊΠ°Π²Ρ‹Ρ‡ΠΈΠ²Π°Π½ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ

<?php

error_reporting
(E_ALL);
ini_set('display_errors', true);
ini_set('html_errors', false);

// ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ массив:
$array = array(1, 2);
$count = count($array);

for (
$i = 0; $i < $count; $i++) {
echo
"\nΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ $i: \n";
echo
"ΠŸΠ»ΠΎΡ…ΠΎ: " . $array['$i'] . "\n";
echo
"Π₯ΠΎΡ€ΠΎΡˆΠΎ: " . $array[$i] . "\n";
echo
"ΠŸΠ»ΠΎΡ…ΠΎ: {$array['$i']}\n";
echo
"Π₯ΠΎΡ€ΠΎΡˆΠΎ: {$array[$i]}\n";
}

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°:

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ 0:
Notice: Undefined index:  $i in /path/to/script.html on line 9
ΠŸΠ»ΠΎΡ…ΠΎ:
Π₯ΠΎΡ€ΠΎΡˆΠΎ: 1
Notice: Undefined index:  $i in /path/to/script.html on line 11
ΠŸΠ»ΠΎΡ…ΠΎ:
Π₯ΠΎΡ€ΠΎΡˆΠΎ: 1

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ 1:
Notice: Undefined index:  $i in /path/to/script.html on line 9
ΠŸΠ»ΠΎΡ…ΠΎ:
Π₯ΠΎΡ€ΠΎΡˆΠΎ: 2
Notice: Undefined index:  $i in /path/to/script.html on line 11
ΠŸΠ»ΠΎΡ…ΠΎ:
Π₯ΠΎΡ€ΠΎΡˆΠΎ: 2

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π°ΡŽΡ‚ этот Ρ„Π°ΠΊΡ‚:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #18 Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

<?php

// ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ всС ошибки
error_reporting(E_ALL);

$arr = array('fruit' => 'apple', 'veggie' => 'carrot');

// Π’Π΅Ρ€Π½ΠΎ
echo $arr['fruit'], PHP_EOL; // apple
echo $arr['veggie'], PHP_EOL; // carrot

// НСвСрно. Π­Ρ‚ΠΎ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈ выбрасываСт PHP-ΠΎΡˆΠΈΠ±ΠΊΡƒ Error ΠΈΠ·-Π·Π° Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΉ константы
// с названиСм fruit
//
// Error: Undefined constant "fruit"
try {
echo
$arr[fruit];
} catch (
Error $e) {
echo
get_class($e), ': ', $e->getMessage(), PHP_EOL;
}

// ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ константу ΠΈ посмотрим,
// ΠΊΠ°ΠΊ измСнится ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°. ΠŸΡ€ΠΈΡΠ²ΠΎΠΈΠΌ константС с Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ fruit Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ "veggie".
define('fruit', 'veggie');

// Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ€Π°Π·Π½ΠΈΡ†Ρƒ
echo $arr['fruit'], PHP_EOL; // apple
echo $arr[fruit], PHP_EOL; // carrot

// Доступ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ Π±Π΅Π· ΠΊΠ°Π²Ρ‹Ρ‡Π΅ΠΊ сработаСт Π²Π½ΡƒΡ‚Ρ€ΠΈ строки. PHP Π½Π΅ ΠΈΡ‰Π΅Ρ‚ константы Π²Π½ΡƒΡ‚Ρ€ΠΈ строк,
// поэтому ошибка здСсь Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚
echo "Hello $arr[fruit]", PHP_EOL; // Hello apple

// Π—Π° ΠΎΠ΄Π½ΠΈΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ: PHP ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ константы,
// Ссли ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ массиву Π²Π½ΡƒΡ‚Ρ€ΠΈ строки ΠΎΠ±Π΅Ρ€Π½ΡƒΠ»ΠΈ Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹ΠΌΠΈ скобками
echo "Hello {$arr[fruit]}", PHP_EOL; // Hello carrot
echo "Hello {$arr['fruit']}", PHP_EOL; // Hello apple

// Π•Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ способ вывСсти Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ массива β€” конкатСнация
echo "Hello " . $arr['fruit'], PHP_EOL; // Hello apple
<?php

// Π­Ρ‚ΠΎ Π½Π΅ сработаСт ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ Ρ€Π°Π·Π±ΠΎΡ€Π° Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅:
// Parse error: parse error, expecting T_STRING' or T_VARIABLE' or T_NUM_STRING'.
// Π­Ρ‚ΠΎ относится ΠΈ ΠΊ ΡΡƒΠΏΠ΅Ρ€Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ Π² строках
print "Hello $arr['fruit']";
print
"Hello $_GET['foo']";

Как ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ€Π°Π·Π΄Π΅Π» ΠΎ синтаксисС, Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобок '[' ΠΈ ']' трСбуСтся ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚:

<?php

echo $arr[somefunc($bar)];

Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Π² качСствС индСкса массива. PHP Ρ‚Π°ΠΊΠΆΠ΅ Π·Π½Π°Π΅Ρ‚ ΠΎ константах:

<?php

$error_descriptions
[E_ERROR] = "ΠŸΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° Ρ„Π°Ρ‚Π°Π»ΡŒΠ½Π°Ρ ошибка";
$error_descriptions[E_WARNING] = "PHP сообщаСт ΠΎ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΈ";
$error_descriptions[E_NOTICE] = "Π­Ρ‚ΠΎ лишь Π½Π΅ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ Π·Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅";

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ E_ERROR β€” это Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ допустимый ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, ΠΊΠ°ΠΊ ΠΈ bar Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅. Но послСдний ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎ сущСству эквивалСнтСн Ρ‚Π°ΠΊΠΎΠΉ записи:

<?php

$error_descriptions
[1] = "ΠŸΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° Ρ„Π°Ρ‚Π°Π»ΡŒΠ½Π°Ρ ошибка";
$error_descriptions[2] = "PHP Π²Ρ‹Π΄Π°Π» ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅";
$error_descriptions[8] = "Π­Ρ‚ΠΎ просто ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅";

ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ константы E_ERROR соотвСтствуСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ 1 ΠΈ Ρ‚. Π΄.

Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΆΠ΅ Π² этом ΠΏΠ»ΠΎΡ…ΠΎΠ³ΠΎ?

Когда-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² PHP, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π·Π°Ρ…ΠΎΡ‡Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΅Ρ‰Ρ‘ ΠΎΠ΄Π½Ρƒ константу ΠΈΠ»ΠΈ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово, Π»ΠΈΠ±ΠΎ константа ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΌΠ΅ΡˆΠ°Ρ‚ΡŒΡΡ. НапримСр, Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ слова empty ΠΈ default, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ относятся ΠΊ Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словам.

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: ΠŸΠΎΠ²Ρ‚ΠΎΡ€ΠΈΠΌ, Π²Π½ΡƒΡ‚Ρ€ΠΈ строки (string) Π² Π΄Π²ΠΎΠΉΠ½Ρ‹Ρ… ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°Ρ… допустимо Π½Π΅ ΠΎΠΊΡ€ΡƒΠΆΠ°Ρ‚ΡŒ индСксы массива ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°ΠΌΠΈ, поэтому "$foo[bar]" β€” допустимая запись. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… Π²Ρ‹ΡˆΠ΅ объяснСно, ΠΏΠΎΡ‡Π΅ΠΌΡƒ, Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ информация Π΄Π°Π½Π° Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΎΠ± ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π² строках.

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π² массив

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ†Π΅Π»ΠΎΠ³ΠΎ числа (int), числа с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ (float), строки (string), логичСского значСния (bool) ΠΈΠ»ΠΈ рСсурса (resource) Π² массив β€” создаёт массив с ΠΎΠ΄Π½ΠΈΠΌ элСмСнтом с индСксом 0 ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ скаляра, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½. Говоря ΠΏΠΎ-Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ, Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ (array) $scalarValue Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ array($scalarValue).

ΠŸΡ€ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° (object) Π² массив элСмСнтами массива становятся свойства (ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅-Ρ‡Π»Π΅Π½Ρ‹) этого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. ΠšΠ»ΡŽΡ‡Π°ΠΌΠΈ становятся ΠΈΠΌΠ΅Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…-Ρ‡Π»Π΅Π½ΠΎΠ², со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΠΌΠΈ: цСлочислСнныС свойства становятся нСдоступными; ΠΊ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ полям класса (private) Π² Π½Π°Ρ‡Π°Π»ΠΎ дописываСтся Π½Π°Π·Π²Π°Π½ΠΈΠ΅ класса; ΠΊ Π·Π°Ρ‰ΠΈΡ‰Ρ‘Π½Π½Ρ‹ΠΌ полям класса (protected) Π² Π½Π°Ρ‡Π°Π»ΠΎ добавляСтся символ '*'. Π­Ρ‚ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ с ΠΎΠ±ΠΎΠΈΡ… сторон значСния Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ NUL-Π±Π°ΠΉΡ‚Ρ‹. НСинициализированныС Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ свойства автоматичСски ΠΎΡ‚Π±Ρ€Π°ΡΡ‹Π²Π°ΡŽΡ‚ΡΡ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #19 ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π² массив

<?php

class A
{
private
$B;
protected
$C;
public
$D;

function
__construct()
{
$this->{1} = null;
}
}

var_export((array) new A());

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°:

array (
  '' . "\0" . 'A' . "\0" . 'B' => NULL,
  '' . "\0" . '*' . "\0" . 'C' => NULL,
  'D' => NULL,
  1 => NULL,
)

Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ нСсколько Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #20 ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΊ массиву

<?php

class A
{
private
$A; // Бвойство станСт ΠΊΠ»ΡŽΡ‡ΠΎΠΌ '\0A\0A'
}

class
B extends A
{
private
$A; // Бвойство станСт ΠΊΠ»ΡŽΡ‡ΠΎΠΌ '\0B\0A'
public $AA; // Бвойство станСт ΠΊΠ»ΡŽΡ‡ΠΎΠΌ 'AA'
}

var_dump((array) new B());

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°:

array(3) {
  ["BA"]=>
  NULL
  ["AA"]=>
  NULL
  ["AA"]=>
  NULL
}

ΠŸΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚ 2 ΠΊΠ»ΡŽΡ‡Π° с Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ 'AA', хотя ΠΎΠ΄ΠΈΠ½ ΠΊΠ»ΡŽΡ‡ Π½Π° самом Π΄Π΅Π»Π΅ называСтся '\0A\0A'.

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡΡ пустой массив, Ссли ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π² массив Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ null.

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅

ΠœΠ°ΡΡΠΈΠ²Ρ‹ ΡΡ€Π°Π²Π½ΠΈΠ²Π°ΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ array_diff() ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ массивов.

Распаковка массива

Массив, ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΡƒΠΊΠ°Π·Π°Π»ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ..., распакуСтся Π½Π° мСстС ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎ массива. Распаковка доступна Ρ‚ΠΎΠ»ΡŒΠΊΠΎ массивам ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ интСрфСйс Traversable. Распаковка массива spread-ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ ... доступна с PHP 7.4.0.

PHP ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎΠ΅ Ρ‡Π΅Ρ€Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ распаковки ΠΈ стандартных элСмСнтов Π΄ΠΎ ΠΈΠ»ΠΈ послС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° ...:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #21 ΠŸΡ€ΠΎΡΡ‚Π°Ρ распаковка массива

<?php

// ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠ³ΠΎ синтаксиса массива.
// Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ с синтаксисом array().
$arr1 = [1, 2, 3];
$arr2 = [...$arr1]; // [1, 2, 3]
$arr3 = [0, ...$arr1]; // [0, 1, 2, 3]
$arr4 = [...$arr1, ...$arr2, 111]; // [1, 2, 3, 1, 2, 3, 111]
$arr5 = [...$arr1, ...$arr1]; // [1, 2, 3, 1, 2, 3]

function getArr() {
return [
'a', 'b'];
}

$arr6 = [...getArr(), 'c' => 'd']; // ['a', 'b', 'c' => 'd'];

var_dump($arr1, $arr2, $arr3, $arr4, $arr5, $arr6);

Распаковка массива ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ ... ΡΠΎΠ±Π»ΡŽΠ΄Π°Π΅Ρ‚ сСмантику Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ array_merge(), поэтому Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ·Π΄Π½ΠΈΠ΅ строковыС ΠΊΠ»ΡŽΡ‡ΠΈ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π½Π½ΠΈΠ΅, Π° цСлочислСнныС ΠΊΠ»ΡŽΡ‡ΠΈ ΠΏΠ΅Ρ€Π΅Π½ΡƒΠΌΠ΅Ρ€ΠΎΠ²Ρ‹Π²Π°ΡŽΡ‚ΡΡ:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #22 Распаковка массива с Π΄ΡƒΠ±Π»ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΌ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ

<?php

// Π‘Ρ‚Ρ€ΠΎΠΊΠΎΠ²Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡
$arr1 = ["a" => 1];
$arr2 = ["a" => 2];
$arr3 = ["a" => 0, ...$arr1, ...$arr2];
var_dump($arr3); // ["a" => 2]

// ЦСлочислСнный ΠΊΠ»ΡŽΡ‡
$arr4 = [1, 2, 3];
$arr5 = [4, 5, 6];
$arr6 = [...$arr4, ...$arr5];
var_dump($arr6); // [1, 2, 3, 4, 5, 6]
// Распаковка массивов создаёт массив [0 => 1, 1 => 2, 2 => 3, 3 => 4, 4 => 5, 5 => 6],
// Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ исходныС цСлочислСнныС ΠΊΠ»ΡŽΡ‡ΠΈ Π½Π΅ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅:

ΠšΠ»ΡŽΡ‡ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ Π½ΠΈ цСлочислСнному, Π½ΠΈ строковому Ρ‚ΠΈΠΏΡƒ, Π²Ρ‹Π±Ρ€Π°ΡΡ‹Π²Π°ΡŽΡ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ TypeError. Π’Π°ΠΊΠΈΠ΅ ΠΊΠ»ΡŽΡ‡ΠΈ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, класс ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ интСрфСйс Traversable.

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅:

Π”ΠΎ PHP 8.1 распаковка массива со строковым ΠΊΠ»ΡŽΡ‡ΠΎΠΌ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π»Π°ΡΡŒ:

<?php

$arr1
= [1, 2, 3];
$arr2 = ['a' => 4];
$arr3 = [...$arr1, ...$arr2];
// Fatal error: Uncaught Error: Cannot unpack array with string keys in example.php:5
$arr4 = [1, 2, 3];
$arr5 = [4, 5];
$arr6 = [...$arr4, ...$arr5]; // Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚: [1, 2, 3, 4, 5]

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

Массив Π² PHP β€” Π³ΠΈΠ±ΠΊΠΈΠΉ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…. Π’ΠΎΡ‚ нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ²:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #23 Π’ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ массивов

<?php

// Код:
$a = array( 'color' => 'красный',
'taste' => 'сладкий',
'shape' => 'ΠΊΡ€ΡƒΠ³',
'name' => 'яблоко',
4 // PHP Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ элСмСнту ΠΊΠ»ΡŽΡ‡ 0
);

$b = array('a', 'b', 'c');

var_dump($a, $b);

// ...эквивалСнтСн ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΠΊΠΎΠ΄Ρƒ:
$a = array();
$a['color'] = 'красный';
$a['taste'] = 'сладкий';
$a['shape'] = 'ΠΊΡ€ΡƒΠ³';
$a['name'] = 'яблоко';
$a[] = 4; // ΠΊΠ»ΡŽΡ‡ΠΎΠΌ станСт 0

$b = array();
$b[] = 'a';
$b[] = 'b';
$b[] = 'c';

// ПослС выполнСния ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° пСрСмСнная $a станСт массивом
// array('color' => 'красный', 'taste' => 'сладкий', 'shape' => 'ΠΊΡ€ΡƒΠ³',
// 'name' => 'яблоко', 0 => 4), Π° пСрСмСнная $b станСт массивом
// array(0 => 'a', 1 => 'b', 2 => 'c'), ΠΈΠ»ΠΈ просто array('a', 'b', 'c')

var_dump($a, $b);

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #24 Π’Ρ‹Π·ΠΎΠ² языковой конструкции array()

<?php

// Массив ΠΊΠ°ΠΊ ΠΊΠ°Ρ€Ρ‚Π° (свойств)
$map = array(
'version' => 4,
'OS' => 'Linux',
'lang' => 'english',
'short_tags' => true
);

var_dump($map);

// Π‘Ρ‚Ρ€ΠΎΠ³ΠΎ числовыС ΠΊΠ»ΡŽΡ‡ΠΈ,
// Ρ‡Ρ‚ΠΎ эквивалСнтно массиву array(0 => 7, 1 => 8, ...)
$array = array(
7,
8,
0,
156,
-
10
);
var_dump($array);

$switching = array(
10, // ΠΊΠ»ΡŽΡ‡ = 0
5 => 6,
3 => 7,
'a' => 4,
11, // ΠΊΠ»ΡŽΡ‡ = 6 (ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ числовым индСксом Π±Ρ‹Π»ΠΎ 5)
'8' => 2, // ΠΊΠ»ΡŽΡ‡ = 8 (число!)
'02' => 77, // ΠΊΠ»ΡŽΡ‡ = '02'
0 => 12 // Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 10 ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ 12
);
var_dump($switching);

// пустой массив
$empty = array();
var_dump($empty);

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #25 ΠšΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡ

<?php

$colors
= array('красный', 'Π³ΠΎΠ»ΡƒΠ±ΠΎΠΉ', 'Π·Π΅Π»Ρ‘Π½Ρ‹ΠΉ', 'ΠΆΡ‘Π»Ρ‚Ρ‹ΠΉ');

foreach (
$colors as $color) {
echo
"Π’Π°ΠΌ нравится $color?\n";
}

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°:

Π’Π°ΠΌ нравится красный?
Π’Π°ΠΌ нравится Π³ΠΎΠ»ΡƒΠ±ΠΎΠΉ?
Π’Π°ΠΌ нравится Π·Π΅Π»Ρ‘Π½Ρ‹ΠΉ?
Π’Π°ΠΌ нравится ΠΆΡ‘Π»Ρ‚Ρ‹ΠΉ?

НСпосрСдствСнноС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ массива допустимо Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠΎ ссылкС.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #26 ИзмСнСниС элСмСнта Π² Ρ†ΠΈΠΊΠ»Π΅

<?php

$colors
= array('red', 'blue', 'green', 'yellow');

foreach (
$colors as &$color) {
$color = mb_strtoupper($color);
}
unset(
$color); /* ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΡƒΠ΄Π°Π»ΡΡŽΡ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½Ρ‹Π΅ записи
Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ $color Π½Π΅ мСняли послСдний элСмСнт массива */

print_r($colors);

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°:

Array
(
    [0] => ΠšΠ ΠΠ‘ΠΠ«Π™
    [1] => Π“ΠžΠ›Π£Π‘ΠžΠ™
    [2] => ЗЕЛЁНЫЙ
    [3] => ЖЁЛВЫЙ
)

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ создаёт массив, индСксация ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ начинаСтся с Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #27 Π˜Π½Π΄Π΅ΠΊΡΠ°Ρ†ΠΈΡ с Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹

<?php

$firstquarter
= array(1 => 'ΡΠ½Π²Π°Ρ€ΡŒ', 'Ρ„Π΅Π²Ρ€Π°Π»ΡŒ', 'ΠΌΠ°Ρ€Ρ‚');
print_r($firstquarter);

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°:

Array
(
    [1] => 'ΡΠ½Π²Π°Ρ€ΡŒ'
    [2] => 'Ρ„Π΅Π²Ρ€Π°Π»ΡŒ'
    [3] => 'ΠΌΠ°Ρ€Ρ‚'
)

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #28 Π—Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ массива

<?php

// ЗаполняСм массив элСмСнтами ΠΈΠ· Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ
$handle = opendir('.');
while (
false !== ($file = readdir($handle))) {
$files[] = $file;
}
closedir($handle);

var_dump($files);

ΠœΠ°ΡΡΠΈΠ²Ρ‹ упорядочСны. ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ функциями сортировки. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎΠ± этом рассказано Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Β«Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с массивами». Для подсчёта количСства элСмСнтов Π² массивС Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ count().

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #29 Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° массива

<?php

sort
($files);
print_r($files);

ΠœΠ°ΡΡΠΈΠ²Ρ‹ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ значСния Π² Π²ΠΈΠ΄Π΅ Π΄Ρ€ΡƒΠ³ΠΈΡ… массивов, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ массивы ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ значСния. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ PHP Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ рСкурсивныС ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #30 РСкурсивныС ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы

<?php

$fruits
= array ( "fruits" => array ( "a" => "апСльсин",
"b" => "Π±Π°Π½Π°Π½",
"c" => "яблоко"
),
"numbers" => array ( 1,
2,
3,
4,
5,
6
),
"holes" => array ( "пСрвая",
5 => "вторая",
"Ρ‚Ρ€Π΅Ρ‚ΡŒΡ"
)
);
var_dump($fruits);

// Ряд ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² доступа ΠΊ значСниям ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ массива
echo $fruits["holes"][5]; // Π’Ρ‹Π²Π΅Π΄Π΅Ρ‚ "вторая"
echo $fruits["fruits"]["a"]; // Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ "апСльсин"
unset($fruits["holes"][0]); // ΡƒΠ΄Π°Π»ΠΈΡ‚ "пСрвая"

// Боздаст Π½ΠΎΠ²Ρ‹ΠΉ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив
$juices["apple"]["green"] = "Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ";
var_dump($juices);

ΠŸΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅ массива Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ значСния. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ массив ΠΏΠΎ ссылкС, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ присваивания ΠΏΠΎ ссылкС.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #31 ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ массивов

<?php

$arr1
= array(2, 3);
$arr2 = $arr1;
$arr2[] = 4; // Массив $arr2 измСнился,
// Массив $arr1 всё Π΅Ρ‰Ρ‘ выглядит Ρ‚Π°ΠΊ: array(2, 3)

$arr3 = &$arr1;
$arr3[] = 4; // Π’Π΅ΠΏΠ΅Ρ€ΡŒ массивы $arr1 ΠΈ $arr3 ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹

var_dump($arr1, $arr2, $arr3);
οΌ‹Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ 5 notes

up
126
mlvljr ΒΆ
15 years ago
please note that when arrays are copied, the "reference status" of their members is preserved (http://www.php.net/manual/en/language.references.whatdo.php).
up
76
thomas tulinsky ΒΆ
10 years ago
I think your first, main example is needlessly confusing, very confusing to newbies:

$array = array(
    "foo" => "bar",
    "bar" => "foo",
);

It should be removed.
 
For newbies:
An array index can be any string value, even a value that is also a value in the array. 
The value of array["foo"] is "bar".
The value of array["bar"] is "foo"

The following expressions are both true:
$array["foo"] == "bar"
$array["bar"] == "foo"
up
58
ken underscore yap atsign email dot com ΒΆ
18 years ago
"If you convert a NULL value to an array, you get an empty array."

This turns out to be a useful property. Say you have a search function that returns an array of values on success or NULL if nothing found.

<?php $values = search(...); ?>

Now you want to merge the array with another array. What do we do if $values is NULL? No problem:

<?php $combined = array_merge((array)$values, $other); ?>

Voila.
up
57
jeff splat codedread splot com ΒΆ
21 years ago
Beware that if you're using strings as indices in the $_POST array, that periods are transformed into underscores:

<html>
<body>
<?php
    printf("POST: "); print_r($_POST); printf("<br/>");
?>
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
    <input type="hidden" name="Windows3.1" value="Sux">
    <input type="submit" value="Click" />
</form>
</body>
</html>

Once you click on the button, the page displays the following:

POST: Array ( [Windows3_1] => Sux )
up
38
chris at ocportal dot com ΒΆ
13 years ago
Note that array value buckets are reference-safe, even through serialization.

<?php
$x='initial';
$test=array('A'=>&$x,'B'=>&$x);
$test=unserialize(serialize($test));
$test['A']='changed';
echo $test['B']; // Outputs "changed"
?>

This can be useful in some cases, for example saving RAM within complex structures.