No hay una correlación entre las teclas de índice numérico y asociativo.
Cuando dice que quiere establecer el valor de una matriz asociativa utilizando el índice de la matriz de la clave/valor, entonces usted tiene que utilizar la clave dada, el ajuste $array[1]
no es lo mismo que establecer $array['foo']
.
consideran este array
print_r(array('foo', 'foo' => 'bar', 'baz', 'some' => 'value'));
Esto dará
Array
(
[0] => foo
[foo] => bar
[1] => baz
[some] => value
)
El foo es el segundo elemento de la matriz. Esa es la compensación , pero no tiene nada que ver con el índice 1. Como puede ver, en esa matriz anterior, el índice 1 está asociado con baz
. Es incorrecto suponer que solo porque foo
es la primera clave asociativa que tiene algo que ver con la clave numérica real 1. Al igual que some
no se correlaciona con 2.
Del mismo modo, para una matriz mixta como se muestra arriba, solución con array_keys
sugirió otra parte de este sitio no va a funcionar, porque
print_r(array_keys(array('foo', 'foo' => 'bar', 'baz', 'some' => 'value')));
dará
Array
(
[0] => 0
[1] => foo
[2] => 1
[3] => some
)
Así que cuando lo hace $array[$keys[1]]
que realmente está haciendo $array['foo']
. Pero si desea acceder al segundo valor asociativo en esa matriz ('some'
), no puede hacer $array[$keys[2]]
porque eso se evaluaría como $array[1]
y eso es baz
.
El offset de un elemento tiene relación alguna con su clave o el valor
print_r(
array(
100 => 'foo',
'foo' => 'bar',
50 => 'baz',
'some' => 'value'
)
);
significa realmente
Array
(//key value offset/position
[100] => foo // 0
[foo] => bar // 1
[50] => baz // 2
[some] => value // 3
)
lo que significa que el elemento en la posición 0 es foo aunque es clave es 100. Si desea extraer elementos de una matriz por desplazamiento, tiene que utilizar
$third = array_splice($array, 2, 1);
echo $third[0]; // baz
Thi s crearía una matriz que contiene solo el elemento en la tercera posición.
O podría utilizar un ArrayIterator
.El ArrayIterator
implementa una interfaz Seekable
que le permite buscar a una posición específica/posición de la matriz y luego obtener esa:
$iterator = new ArrayIterator($array);
$iterator->seek(3);
echo $iterator->current(); // value
Funciona como un encanto. Gracias. – Marty
Como nota al margen, ¿por qué los desarrolladores de PHP crearían una forma no intuitiva de acceder a una matriz? – Marty
@Marty esto tiene menos que ver con la forma en que los desarrolladores de PHP lo implementaron, pero más con su falta de comprensión de cómo funcionan las matrices. Técnicamente, lo anterior aún usa el nombre asociativo. No hay correlación entre las claves de índice numérico y asociativo. – Gordon