Il n'y a pas de corrélation entre les clés d'indexation numériques et associatives.
Quand tu dis que tu veux définir la valeur d'un tableau associatif en utilisant l'index du tableau de la clé/valeur vous devez alors utiliser la clé donnée, en définissant les paramètres suivants $array[1]
n'est pas la même chose que de définir $array['foo']
.
Considérez ce tableau
print_r( array('foo', 'foo' => 'bar', 'baz', 'some' => 'value') );
Cela donnera
Array
(
[0] => foo
[foo] => bar
[1] => baz
[some] => value
)
Le foo est le deuxième élément du tableau. C'est le décalage mais cela n'a rien à voir avec l'indice 1. Comme vous pouvez le voir, dans le tableau ci-dessus, l'indice 1 est associé à baz
. Il est faux de supposer que juste parce que foo
est la première clé associative qui a quelque chose à voir avec la clé numérique 1. Tout comme some
n'est pas en corrélation avec 2.
De même, pour un tableau mixte comme celui présenté ci-dessus, la solution avec array_keys
suggéré ailleurs sur ce site ne fonctionnera pas, car
print_r( array_keys(array('foo', 'foo' => 'bar', 'baz', 'some' => 'value')) );
donnera
Array
(
[0] => 0
[1] => foo
[2] => 1
[3] => some
)
Donc quand vous faites $array[$keys[1]]
vous faites vraiment $array['foo']
. Mais si vous voulez accéder à la deuxième valeur associative de ce tableau ( 'some'
), vous ne pouvez pas faire $array[$keys[2]]
parce que ce serait évaluer à $array[1]
et c'est baz
.
Le décalage d'un élément n'est absolument pas lié à sa clé ou à sa valeur.
print_r(
array(
100 => 'foo',
'foo' => 'bar',
50 => 'baz',
'some' => 'value'
)
);
signifie vraiment
Array
( //key value offset/position
[100] => foo // 0
[foo] => bar // 1
[50] => baz // 2
[some] => value // 3
)
ce qui signifie que l'élément à l'offset 0 est foo bien que sa clé soit 100. Si vous voulez extraire des éléments d'un tableau par décalage, vous devez utiliser la méthode suivante
$third = array_splice($array, 2, 1);
echo $third[0]; // baz
Cela créerait un tableau contenant uniquement l'élément en troisième position.
Ou vous pouvez utiliser un ArrayIterator
. Le site ArrayIterator
met en œuvre un Seekable
qui vous permet de rechercher une position/un décalage spécifique dans le tableau, puis de le récupérer :
$iterator = new ArrayIterator($array);
$iterator->seek(3);
echo $iterator->current(); // value