Не існує взаємозв'язку між числовими та асоціативними клавішами покажчика.
Коли ви говорите, що хочете встановити значення асоціативного масиву, використовуючи індекс масиву ключа / значення , тоді вам потрібно використовувати даний ключ, параметр $array[1]не те саме, що параметр $array['foo'].
Розглянемо цей масив
print_r( array('foo', 'foo' => 'bar', 'baz', 'some' => 'value') );
Це дасть
Array
(
[0] => foo
[foo] => bar
[1] => baz
[some] => value
)
Foo - це другий елемент масиву. Це зсув , але це не має нічого спільного з індексом 1. Як бачите, у наведеному вище масиві індекс 1 пов’язаний з baz. Неправильно вважати, що саме тому, що він fooє першим асоціативним ключем, він має щось спільне з фактичним числовим ключем 1. Так само, як someі не співвідноситься з 2.
Так само для змішаного масиву, як показано вище, рішення із array_keysзапропонованим в іншому місці на цьому веб-сайті не буде працювати, оскільки
print_r( array_keys(array('foo', 'foo' => 'bar', 'baz', 'some' => 'value')) );
дасть
Array
(
[0] => 0
[1] => foo
[2] => 1
[3] => some
)
Отже, коли ви це робите, $array[$keys[1]]ви дійсно робите $array['foo']. Але якщо ви хотіли отримати доступ до другого асоціативного значення в цьому масиві ( 'some'), ви не можете цього зробити, $array[$keys[2]]тому що це обчислює значення $array[1]і це baz.
Зсув елемента абсолютно не пов'язаний з його ключем або значенням
print_r(
array(
100 => 'foo',
'foo' => 'bar',
50 => 'baz',
'some' => 'value'
)
);
насправді означає
Array
( //key value offset/position
[100] => foo // 0
[foo] => bar // 1
[50] => baz // 2
[some] => value // 3
)
що означає, що елемент зі зміщенням 0 має значення foo, хоча це ключ - 100. Якщо ви хочете витягнути елементи з масиву шляхом зміщення, вам слід використовувати
$third = array_splice($array, 2, 1);
echo $third[0]; // baz
Це створило б масив, що містив би лише елемент у третій позиції.
Або ви можете використовувати ArrayIterator. В ArrayIteratorреалізує Seekableінтерфейс , який дозволяє шукати в певній позиції / зміщення в масиві , а потім принести що:
$iterator = new ArrayIterator($array);
$iterator->seek(3);
echo $iterator->current(); // value