Sayısal ve ilişkili dizin anahtarları arasında bir ilişki yoktur.
Bir ilişkisel dizinin değerini anahtar / değerin dizi indeksini kullanarak ayarlamak istediğinizi söylediğinizde , verilen anahtarı kullanmanız gerekir, ayar ayar $array[1]ile aynı değildir $array['foo'].
Bu diziyi düşünün
print_r( array('foo', 'foo' => 'bar', 'baz', 'some' => 'value') );
Bu verecek
Array
(
[0] => foo
[foo] => bar
[1] => baz
[some] => value
)
Foo, dizideki ikinci öğedir. Bu uzaklıktır , ancak indeks 1 ile ilgisi yoktur. Gördüğünüz gibi yukarıdaki dizide indeks 1 ile ilişkilendirilmiştir baz. Sırf fooilk ilişkili anahtar olduğu için gerçek sayısal anahtar 1 ile bir ilgisi olduğunu varsaymak yanlıştır . Tıpkı some2 ile ilişkili olmadığı gibi .
Benzer şekilde, yukarıda gösterildiği gibi karma bir dizi için array_keys, bu sitede başka bir yerde önerilen çözüm işe yaramayacaktır çünkü
print_r( array_keys(array('foo', 'foo' => 'bar', 'baz', 'some' => 'value')) );
verecek
Array
(
[0] => 0
[1] => foo
[2] => 1
[3] => some
)
Yani yaptığın zaman $array[$keys[1]]gerçekten yapıyorsun $array['foo']. Ancak, bu dizideki ( 'some') ikinci ilişkilendirilebilir değere erişmek istiyorsanız, bunu yapamazsınız $array[$keys[2]]çünkü bu, şeklinde değerlendirilir $array[1]ve bu baz.
Bir öğenin Ofseti, anahtar veya değeriyle tamamen ilgisizdir
print_r(
array(
100 => 'foo',
'foo' => 'bar',
50 => 'baz',
'some' => 'value'
)
);
gerçekten anlamı
Array
(
[100] => foo
[foo] => bar
[50] => baz
[some] => value
)
bu, anahtar 100 olmasına rağmen 0 uzaklığındaki elemanın foo olduğu anlamına gelir. Bir diziden ötelemeye göre eleman çıkarmak istiyorsanız, kullanmanız gerekir
$third = array_splice($array, 2, 1);
echo $third[0];
Bu, yalnızca üçüncü pozisyondaki elemanı tutan bir dizi oluşturacaktır.
Veya bir ArrayIterator. ArrayIteratorUygular bir Seekablebelirli bir konuma etmeye olanak arayüz / dizide ofset ve daha sonra bu getirme:
$iterator = new ArrayIterator($array);
$iterator->seek(3);
echo $iterator->current();