Tidak ada korelasi antara kunci indeks numerik dan asosiatif.
Ketika Anda mengatakan Anda ingin mengatur nilai array asosiatif menggunakan indeks array dari kunci / nilai , maka Anda harus menggunakan kunci yang diberikan, pengaturan $array[1]tidak sama dengan pengaturan$array['foo'] .
Pertimbangkan larik ini
print_r( array('foo', 'foo' => 'bar', 'baz', 'some' => 'value') );
Ini akan memberi
Array
(
[0] => foo
[foo] => bar
[1] => baz
[some] => value
)
Foo adalah elemen kedua dalam larik. Itu offsetnya , tapi tidak ada hubungannya dengan indeks 1. Seperti yang Anda lihat, dalam larik di atas, indeks 1 dikaitkan dengan baz. Salah untuk mengasumsikan bahwa hanya karena fookunci asosiatif pertama itu ada hubungannya dengan kunci numerik 1. Sama seperti sometidak berkorelasi dengan 2.
Demikian juga, untuk array campuran seperti yang ditunjukkan di atas, solusi dengan yang array_keysdisarankan di tempat lain di situs ini tidak akan berfungsi, karena
print_r( array_keys(array('foo', 'foo' => 'bar', 'baz', 'some' => 'value')) );
akan memberi
Array
(
[0] => 0
[1] => foo
[2] => 1
[3] => some
)
Jadi, ketika Anda melakukannya, $array[$keys[1]]Anda benar-benar melakukannya $array['foo']. Tetapi jika Anda ingin mengakses nilai asosiatif kedua dalam array itu ( 'some'), Anda tidak dapat melakukannya $array[$keys[2]]karena itu akan mengevaluasi ke $array[1]dan itu baz.
Offset elemen sama sekali tidak terkait dengan kunci atau nilainya
print_r(
array(
100 => 'foo',
'foo' => 'bar',
50 => 'baz',
'some' => 'value'
)
);
benar-benar berarti
Array
(
[100] => foo
[foo] => bar
[50] => baz
[some] => value
)
yang berarti elemen pada offset 0 adalah foo meskipun kuncinya adalah 100. Jika Anda ingin mengekstrak elemen dari larik dengan offset, Anda harus menggunakan
$third = array_splice($array, 2, 1);
echo $third[0];
Ini akan membuat sebuah array yang hanya menampung elemen di posisi ketiga.
Atau Anda bisa menggunakan ArrayIterator. The ArrayIteratormengimplementasikan sebuah Seekableantarmuka yang memungkinkan Anda mencari untuk posisi tertentu / offset dalam array dan kemudian mengambil bahwa:
$iterator = new ArrayIterator($array);
$iterator->seek(3);
echo $iterator->current();