Ой, ничего не найдено!

К сожалению, по вашему запросу пока ничего нет (но это только пока!), зато вы можете подписаться на нашу замечательную email-рассылку, чтобы не пропустить самое интересное в будущем.

  • 465

Ловушки и особенности поведения PHP-массивов

  • 1 минута на чтение

⚠️ 1. Строки, похожие на числа, приводятся к числам

$array = [
    '01' => 'one',
    1 => 'uno',
];

print_r($array);

Результат:

Array
(
    [1] => uno
)

🔎 Почему? Потому что '01'1 (PHP считает это числом), и второй элемент затирает первый. В ассоциативной структуре ключи должны быть уникальными.

⚠️ 2. Добавление [] всегда даёт числовой ключ

$array = [];
$array['foo'] = 'bar';
$array[] = 'baz'; // ← добавит под числовым ключом

print_r($array);

Результат:

Array
(
    [foo] => bar
    [0] => baz
)

📌 Важно: [] не "продолжает" последний ключ — он ищет максимальный числовой ключ и увеличивает на 1. Даже если до этого были только строковые.

⚠️ 3. Сброс ключей при array_values()

$array = [
    'id' => 123,
    'name' => 'Alice',
];

$values = array_values($array);

print_r($values);

Результат:

Array
(
    [0] => 123
    [1] => Alice
)

🔎 Все ключи сброшены. Это частая ошибка: после pluck(), map(), values() в Laravel — будьте осторожны с потерей ключей.

Старт без оплаты
Месяц хостинга бесплатно для новых проектов
Разместите сайт, проверьте скорость и оцените удобство Siteko.net. Просто выберите тариф и начните тестовый месяц.
Посмотреть тарифы

⚠️ 4. Перемешанные ключи — всё равно OK

$array = [
    0 => 'a',
    'foo' => 'b',
    1 => 'c',
    'bar' => 'd',
];

foreach ($array as $key => $value) {
    echo "$key => $value\n";
}

Результат:

0 => a
foo => b
1 => c
bar => d

✅ PHP разрешает любые типы ключей в одном массиве.

⚠️ 5. JSON может всё испортить

$data = [
    '01' => 'one',
    '02' => 'two',
];

echo json_encode($data);

Результат:

{"1":"one","2":"two"}

🔴 Строки '01', '02' становятся просто "1", "2" — потому что JSON не различает строковые и числовые ключи, если это цифры.

📌 Laravel часто использует json_encode()/response()->json(), так что будь внимателен, если важны именно формат и ведущие нули в ключах.

📘 Итог

📌 Важно знать при работе с: JSON, merge, ключами - Строки-числа становятся числами

Старт без оплаты
Месяц хостинга бесплатно для новых проектов
Разместите сайт, проверьте скорость и оцените удобство Siteko.net. Просто выберите тариф и начните тестовый месяц.
Посмотреть тарифы

📌 Важно знать при: генерации массивов - [] всегда добавляет числовой ключ

📌 Важно знать при: итерации по массиву - Ключи могут быть перемешаны

📌 Важно знать при: фильтрации - array_values() сбрасывает ключи

📌 Важно знать при: использовании API, сериализации - JSON ломает ключи с ведущими нулями

Первый месяц бесплатно

Хостинг Siteko.net для стабильного запуска сайта

Разместите проект на Siteko.net и проверьте скорость, панель управления и поддержку без стартовой оплаты.

  • 1 месяц бесплатно для новых клиентов сразу после выбора тарифа.
  • Быстрый старт для лендинга, блога или корпоративного сайта.
  • Поддержка рядом поможет с переносом и настройкой проекта.
Выбрать тариф