ไม่มีความสัมพันธ์ระหว่างคีย์ดัชนีตัวเลขและการเชื่อมโยง
เมื่อคุณบอกว่าคุณต้องการที่จะกำหนดค่าของอาเรย์โดยใช้ดัชนีอาร์เรย์ของคีย์ / ค่าแล้วคุณต้องใช้คีย์ที่กำหนด, การตั้งค่าไม่ได้เช่นเดียวกับการตั้งค่า$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
(
[100] => foo
[foo] => bar
[50] => baz
[some] => value
)
ซึ่งหมายความว่าองค์ประกอบที่ offset 0 คือ foo แม้ว่าคีย์จะเป็น 100 ก็ตามหากคุณต้องการแยกองค์ประกอบจากอาร์เรย์ด้วยออฟเซ็ตคุณต้องใช้
$third = array_splice($array, 2, 1);
echo $third[0];
สิ่งนี้จะสร้างอาร์เรย์ที่มีเฉพาะองค์ประกอบที่ตำแหน่งที่สาม
หรือคุณสามารถใช้ArrayIterator
ไฟล์. ArrayIterator
ดำเนินSeekable
อินเตอร์เฟซที่ช่วยให้คุณขอให้อยู่ในตำแหน่งที่เฉพาะเจาะจง / ชดเชยในอาร์เรย์และจากนั้นเรียกว่า
$iterator = new ArrayIterator($array);
$iterator->seek(3);
echo $iterator->current();