Không có mối tương quan giữa các khóa chỉ mục số và chỉ mục kết hợp.
Khi bạn nói rằng bạn muốn đặt giá trị của một mảng kết hợp bằng cách sử dụng chỉ số mảng của khóa / giá trị , thì bạn phải sử dụng khóa đã cho, cài đặt $array[1]
không giống như cài đặt $array['foo']
.
Hãy xem xét mảng này
print_r( array('foo', 'foo' => 'bar', 'baz', 'some' => 'value') );
Điều này sẽ cho
Array
(
[0] => foo
[foo] => bar
[1] => baz
[some] => value
)
Foo là phần tử thứ hai trong mảng. Đó là phần bù , nhưng nó không liên quan gì đến chỉ số 1. Như bạn có thể thấy, trong mảng ở trên, chỉ số 1 được liên kết với baz
. Sai lầm khi cho rằng chỉ vì foo
là khóa kết hợp đầu tiên nên nó có liên quan gì đến khóa số thực 1. Giống như some
không tương quan với 2.
Tương tự như vậy, đối với một mảng hỗn hợp như được hiển thị ở trên, giải pháp được array_keys
đề xuất ở nơi khác trên trang web này sẽ không hoạt động, bởi vì
print_r( array_keys(array('foo', 'foo' => 'bar', 'baz', 'some' => 'value')) );
sẽ cho
Array
(
[0] => 0
[1] => foo
[2] => 1
[3] => some
)
Vì vậy, khi bạn làm $array[$keys[1]]
bạn đang thực sự làm $array['foo']
. Nhưng nếu bạn muốn truy cập giá trị kết hợp thứ hai trong mảng ( 'some'
) đó, bạn không thể làm $array[$keys[2]]
vì điều đó sẽ đánh giá đến $array[1]
và đó là baz
.
Phần bù đắp của một phần tử hoàn toàn không liên quan đến khóa hoặc giá trị của nó
print_r(
array(
100 => 'foo',
'foo' => 'bar',
50 => 'baz',
'some' => 'value'
)
);
Thực sự có nghĩa là
Array
( //key value offset/position
[100] => foo // 0
[foo] => bar // 1
[50] => baz // 2
[some] => value // 3
)
có nghĩa là phần tử ở độ lệch 0 là foo mặc dù khóa của nó là 100. Nếu bạn muốn trích xuất các phần tử từ một mảng bằng phần bù, bạn phải sử dụng
$third = array_splice($array, 2, 1);
echo $third[0]; // baz
Điều này sẽ tạo ra một mảng chỉ chứa phần tử ở vị trí thứ ba.
Hoặc bạn có thể sử dụng một ArrayIterator
. Các ArrayIterator
dụng cụ một Seekable
giao diện cho phép bạn tìm đến một vị trí cụ thể / bù đắp trong mảng và sau đó lấy rằng:
$iterator = new ArrayIterator($array);
$iterator->seek(3);
echo $iterator->current(); // value