0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>В PHP есть только один тип данных для массивов - Array. Его уникальность состоит в том, что с одной стороны он работает как обычный массив, а с другой - как ассоциативный. Зависит от того, как его используют.</p>
1
<p>В PHP есть только один тип данных для массивов - Array. Его уникальность состоит в том, что с одной стороны он работает как обычный массив, а с другой - как ассоциативный. Зависит от того, как его используют.</p>
2
<p>Поначалу такой подход может подкупить своей кажущейся простотой, особенно тех, кто не имел дела с другими языками. Но чем дальше в код, тем больше проблем он приносит.</p>
2
<p>Поначалу такой подход может подкупить своей кажущейся простотой, особенно тех, кто не имел дела с другими языками. Но чем дальше в код, тем больше проблем он приносит.</p>
3
<p>Самый простой пример - JSON. В JSON массив и ассоциативный массив - разные сущности:</p>
3
<p>Самый простой пример - JSON. В JSON массив и ассоциативный массив - разные сущности:</p>
4
<p><strong>Ассоциативный массив</strong></p>
4
<p><strong>Ассоциативный массив</strong></p>
5
<p><strong>Массив</strong></p>
5
<p><strong>Массив</strong></p>
6
<p>Если преобразовать JSON в структуру на PHP, то эта информация теряется:</p>
6
<p>Если преобразовать JSON в структуру на PHP, то эта информация теряется:</p>
7
<p>Если мы не знаем структуру JSON, то у нас нет простого способа понять, что перед нами - массив или ассоциативный массив. В интернете с подобным сталкиваются постоянно и предлагают такой способ, как анализ ключей. Если они все числовые, то считаем, что массив, иначе - ассоциативный массив.</p>
7
<p>Если мы не знаем структуру JSON, то у нас нет простого способа понять, что перед нами - массив или ассоциативный массив. В интернете с подобным сталкиваются постоянно и предлагают такой способ, как анализ ключей. Если они все числовые, то считаем, что массив, иначе - ассоциативный массив.</p>
8
<p>Конвертация из массива в JSON сопряжена с такими же проблемами. Как понять, во что конвертировать переданный массив?</p>
8
<p>Конвертация из массива в JSON сопряжена с такими же проблемами. Как понять, во что конвертировать переданный массив?</p>
9
<p>Другая проблема заключается в том, что достаточно легко ошибиться с типом массива и начать его использовать не по назначению:</p>
9
<p>Другая проблема заключается в том, что достаточно легко ошибиться с типом массива и начать его использовать не по назначению:</p>
10
<p>Первое удивление - код работает! Теперь попробуйте догадаться, что находится внутри $data.</p>
10
<p>Первое удивление - код работает! Теперь попробуйте догадаться, что находится внутри $data.</p>
11
<p>Из этого вывода должно быть понятно, что индексированных массивов в PHP нет. Есть упорядоченные ассоциативные массивы, с операцией [] =: добавить элемент с автоматическим присвоением ключа.</p>
11
<p>Из этого вывода должно быть понятно, что индексированных массивов в PHP нет. Есть упорядоченные ассоциативные массивы, с операцией [] =: добавить элемент с автоматическим присвоением ключа.</p>
12
<p>Но самое неудобное - функции которые могут сохранять, а могут не сохранять ключи. Обычно в таких функциях есть дополнительный параметр флаг preserve_keys, который меняет описанное поведение.</p>
12
<p>Но самое неудобное - функции которые могут сохранять, а могут не сохранять ключи. Обычно в таких функциях есть дополнительный параметр флаг preserve_keys, который меняет описанное поведение.</p>
13
<ul><li><p><a>array_reverse</a></p>
13
<ul><li><p><a>array_reverse</a></p>
14
<p><strong>array_reverse(array $array, bool $preserve_keys = false): array</strong></p>
14
<p><strong>array_reverse(array $array, bool $preserve_keys = false): array</strong></p>
15
<p>Если preserve_keys установлен в TRUE, то числовые ключи будут сохранены. Нечисловые ключи не подвержены этой опции и всегда сохраняются.</p>
15
<p>Если preserve_keys установлен в TRUE, то числовые ключи будут сохранены. Нечисловые ключи не подвержены этой опции и всегда сохраняются.</p>
16
</li>
16
</li>
17
<li><p><a>array_unique</a></p>
17
<li><p><a>array_unique</a></p>
18
<p><strong>array_unique(array $array, int $flags = SORT_STRING): array</strong></p>
18
<p><strong>array_unique(array $array, int $flags = SORT_STRING): array</strong></p>
19
<p>Обратите внимание, что ключи сохранятся. Если в соответствии с заданными flags несколько элементов определяются как идентичные, то будут сохранены ключ и значение первого такого элемента.</p>
19
<p>Обратите внимание, что ключи сохранятся. Если в соответствии с заданными flags несколько элементов определяются как идентичные, то будут сохранены ключ и значение первого такого элемента.</p>
20
</li>
20
</li>
21
</ul><p>По сути, в описании каждой функции, которая принимает на вход массив (или массивы) и возвращает массив, есть секция с пояснением, сохраняет ли ключи функция или нет, и как это поведение можно изменить.</p>
21
</ul><p>По сути, в описании каждой функции, которая принимает на вход массив (или массивы) и возвращает массив, есть секция с пояснением, сохраняет ли ключи функция или нет, и как это поведение можно изменить.</p>