Как PHP отслеживает порядок в ассоциативном массиве?
При нажатии нового значения на индексированный массив
$array[] = 'new value';
Документация PHP объясняет, как она добавляется в положение [MAX_INDEX + 1].
При нажатии нового значения на ассоциативный массив
$array['key'] = 'new value';
он работает одинаково, но я не вижу никаких объяснений в документации, чтобы подтвердить, как и почему это делается. Порядок, кажется, последователен в моей реализации, но как я точно знаю, что заказ останется прежним? Кто-нибудь знает, как PHP реализует это в фоновом режиме?
Ответы
Ответ 1
Как ассоциативные массивы, реализованные в PHP?, могут дать вам некоторое представление.
Похоже, что массивы PHP - это по существу хэш-таблицы, поэтому порядок массива останется неизменным до тех пор, пока вы его не измените (например, путем сортировки массива).
РЕДАКТИРОВАТЬ: Похоже, что это происходит с понижением, позвольте мне явно включить источники, с которыми я связан в комментарии ниже, здесь...
Ответ 2
MAX_INDEX на самом деле не имеет ничего общего с заказом.
Вы можете сделать
$array[5] = 'new value';
$array[1] = 'new value';
$array[105] = 'new value';
$array[2] = 'new value';
и этот массив сохранит этот порядок.
Массив PHP - это упорядоченная карта, то есть карта, которая поддерживает порядок.
элементы массива просто сохраняют порядок, так как они были добавлены
это все.
Ответ 3
Я предпочитаю полагаться на ksort. По моему опыту, массивы остаются неизменными до тех пор, пока вы не начнете удалять элементы. Лучше вручную отсортировать их и узнать, что они находятся в том порядке, в котором вы хотите.
Ответ 4
Все массивы PHP, числовые и ассоциативные, реализованы в виде так называемой "упорядоченной хэш-таблицы". Это термин науки о данных, который означает: "Разумное быстрое хранилище значений ключей, которое отслеживает порядок, в котором ключи и значения были вставлены". Другими словами, массивы PHP имеют немного памяти для запоминания порядка. Каждый раз, когда вы что-то вкладываете в это, PHP автоматически вносит туда и порядок.
Интересно, что это происходит для числовых ключей как well-, поэтому, если вы поместите значения 1,2,3,4,5 в массив PHP, PHP по-прежнему будет отдельно следить за порядком. Если это звучит расточительно, то потому что это так! Это, однако, сохраняет мозговые циклы, которые могут быть использованы для решения других проблем людей, реальных и воображаемых.