Возможный дубликат:
Являются ли PHP Ассоциативные массивы заказаны?
Если я добавляю элементы в ассоциативный массив с разными ключами, сохраняется ли порядок добавления? Как я могу получить доступ к «предыдущим» и «следующим» элементам данного элемента?
Да, php-массивы имеют неявный порядок. Используйте reset
, next
, prev
и current
– или только цикл foreach
– для проверки.
Да, он сохраняет заказ. вы можете думать о php-массивах как о заказанных хэш-картах .
Вы можете думать о том, что элементы упорядочиваются по «времени создания индекса». Например
$a = array(); $a['x'] = 1; $a['y'] = 1; var_dump($a); // x, y $a = array(); $a['x'] = 1; $a['y'] = 1; $a['x'] = 2; var_dump($a); // still x, y even though we changed the value associated with the x index. $a = array(); $a['x'] = 1; $a['y'] = 1; unset($a['x']); $a['x'] = 1; var_dump($a); // y, x now! we deleted the 'x' index, so its position was discarded, and then recreated
с$a = array(); $a['x'] = 1; $a['y'] = 1; var_dump($a); // x, y $a = array(); $a['x'] = 1; $a['y'] = 1; $a['x'] = 2; var_dump($a); // still x, y even though we changed the value associated with the x index. $a = array(); $a['x'] = 1; $a['y'] = 1; unset($a['x']); $a['x'] = 1; var_dump($a); // y, x now! we deleted the 'x' index, so its position was discarded, and then recreated
Подводя итог, если вы добавляете запись, в которой в настоящее время не существует ключа в массиве, позиция записи будет в конце списка. Если вы обновляете запись для существующего ключа, позиция не изменяется.
foreach петли над массивами с использованием естественного порядка, показанного выше. Вы также можете использовать next () current () prev () reset () и друзей, если хотите, хотя они редко используются, поскольку foreach был введен в язык.
Кроме того, print_r () и var_dump () выводят свои результаты, используя порядок естественного массива.
Если вы знакомы с java, LinkedHashMap является наиболее похожей структурой данных.