Não há correlação entre as chaves de índice numéricas e associativas.
Quando você diz que deseja definir o valor de um array associativo usando o índice do array da chave / valor , então você tem que usar a chave fornecida, configuração $array[1]não é o mesmo que configuração $array['foo'].
Considere esta matriz
print_r( array('foo', 'foo' => 'bar', 'baz', 'some' => 'value') );
Isso vai dar
Array
(
[0] => foo
[foo] => bar
[1] => baz
[some] => value
)
O foo é o segundo elemento da matriz. Esse é o deslocamento , mas não tem nada a ver com o índice 1. Como você pode ver, no array acima, o índice 1 está associado baz. É errado presumir que apenas porque fooé a primeira chave associativa, isso tem algo a ver com a chave numérica real 1. Assim como somenão se correlaciona com 2.
Da mesma forma, para uma matriz mista como mostrado acima, a solução com array_keyssugerida em outro lugar neste site não funcionará, porque
print_r( array_keys(array('foo', 'foo' => 'bar', 'baz', 'some' => 'value')) );
darei
Array
(
[0] => 0
[1] => foo
[2] => 1
[3] => some
)
Então, quando você faz, $array[$keys[1]]está realmente fazendo $array['foo']. Mas se você quiser acessar o segundo valor associativo nesse array ( 'some'), você não pode fazer $array[$keys[2]]porque isso seria avaliado como $array[1]e pronto baz.
O deslocamento de um elemento não está totalmente relacionado à sua chave ou 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
)
o que significa que o elemento no deslocamento 0 é foo, embora sua chave seja 100. Se você deseja extrair elementos de uma matriz por deslocamento, você deve usar
$third = array_splice($array, 2, 1);
echo $third[0]; // baz
Isso criaria uma matriz contendo apenas o elemento na terceira posição.
Ou você pode usar um ArrayIterator. O ArrayIteratorimplementa uma Seekableinterface que permite buscar uma posição / deslocamento específico na matriz e, em seguida, buscar:
$iterator = new ArrayIterator($array);
$iterator->seek(3);
echo $iterator->current(); // value