Il n'y a pas de corrélation entre les clés d'index numériques et associatives.
Lorsque vous dites que vous souhaitez définir la valeur d'un tableau associatif à l'aide de l'index du tableau de la clé / valeur , vous devez utiliser la clé donnée, le paramètre $array[1]n'est pas le même que le paramètre $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 toto est le deuxième élément du tableau. C'est le décalage , mais cela n'a rien à voir avec l'index 1. Comme vous pouvez le voir, dans ce tableau ci-dessus, l'index 1 est associé à baz. Il est faux de supposer que, simplement parce que fooc'est la première clé associative, cela a quelque chose à voir avec la clé numérique réelle 1. Tout comme somene correspond pas à 2.
De même, pour un tableau mixte comme indiqué ci-dessus, la solution array_keyssuggérée ailleurs sur ce site ne fonctionnera pas, car
print_r( array_keys(array('foo', 'foo' => 'bar', 'baz', 'some' => 'value')) );
va donner
Array
(
[0] => 0
[1] => foo
[2] => 1
[3] => some
)
Alors, quand vous faites, $array[$keys[1]]vous faites vraiment $array['foo']. Mais si vous vouliez accéder à la deuxième valeur associative dans ce tableau ( 'some'), vous ne pouvez pas le faire $array[$keys[2]]car cela serait évalué à $array[1]et c'est baz.
Le décalage d'un élément n'a aucun rapport avec 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 offset, vous devez utiliser
$third = array_splice($array, 2, 1);
echo $third[0]; // baz
Cela créerait un tableau contenant uniquement l'élément à la troisième position.
Ou vous pouvez utiliser un fichier ArrayIterator. Il ArrayIteratorimplémente une Seekableinterface qui vous permet de rechercher une position / un décalage spécifique dans le tableau, puis de récupérer cela:
$iterator = new ArrayIterator($array);
$iterator->seek(3);
echo $iterator->current(); // value