No existe correlación entre las claves de índice numéricas y asociativas.
Cuando dice que desea establecer el valor de una matriz asociativa utilizando el índice de matriz de la clave / valor , entonces debe usar la clave dada, la configuración $array[1]no es lo mismo que la configuración $array['foo'].
Considere esta matriz
print_r( array('foo', 'foo' => 'bar', 'baz', 'some' => 'value') );
Esto le dará
Array
(
[0] => foo
[foo] => bar
[1] => baz
[some] => value
)
Foo es el segundo elemento de la matriz. Ese es el desplazamiento , pero no tiene nada que ver con el índice 1. Como puede ver, en esa matriz anterior, el índice 1 está asociado baz. Es incorrecto asumir que solo porque fooes la primera clave asociativa tiene algo que ver con la clave numérica real 1. Al igual someque no se correlaciona con 2.
Del mismo modo, para una matriz mixta como la que se muestra arriba, la solución array_keyssugerida en otra parte de este sitio no funcionará, porque
print_r( array_keys(array('foo', 'foo' => 'bar', 'baz', 'some' => 'value')) );
daré
Array
(
[0] => 0
[1] => foo
[2] => 1
[3] => some
)
Entonces, cuando lo haces $array[$keys[1]], realmente lo estás haciendo $array['foo']. Pero si quisiera acceder al segundo valor asociativo en esa matriz ( 'some'), no puede hacerlo $array[$keys[2]]porque eso evaluaría a $array[1]y eso es baz.
La compensación de un elemento no tiene ninguna relación con su clave o valor
print_r(
array(
100 => 'foo',
'foo' => 'bar',
50 => 'baz',
'some' => 'value'
)
);
realmente significa
Array
( //key value offset/position
[100] => foo // 0
[foo] => bar // 1
[50] => baz // 2
[some] => value // 3
)
lo que significa que el elemento en el desplazamiento 0 es foo aunque su clave es 100. Si desea extraer elementos de una matriz por desplazamiento, debe usar
$third = array_splice($array, 2, 1);
echo $third[0]; // baz
Esto crearía una matriz que contiene solo el elemento en la tercera posición.
O podrías usar un ArrayIterator. El ArrayIteratorimplementa una Seekableinterfaz que le permite buscar una posición / desplazamiento específico en la matriz y luego buscar eso:
$iterator = new ArrayIterator($array);
$iterator->seek(3);
echo $iterator->current(); // value