数字索引键和关联索引键之间没有关联。
当你说你想使用键/值的数组索引来设置关联数组的值时,那么你必须使用给定的键,设置与set不同。$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 与 相关联。假设仅仅因为是第一个关联键,它与实际的数字键1有任何关系,这是错误的。就像不与2相关。baz
foo
some
同样,对于如上所示的混合阵列,此站点上其他地方建议的解决方案将不起作用,因为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