Es gibt keine Korrelation zwischen numerischen und assoziativen Indexschlüsseln.
Wenn Sie sagen, dass Sie den Wert eines assoziativen Arrays mithilfe des Array-Index des Schlüssels / Werts festlegen möchten , müssen Sie den angegebenen Schlüssel verwenden. Die Einstellung entspricht $array[1]nicht der Einstellung $array['foo'].
Betrachten Sie dieses Array
print_r( array('foo', 'foo' => 'bar', 'baz', 'some' => 'value') );
Dies wird geben
Array
(
[0] => foo
[foo] => bar
[1] => baz
[some] => value
)
Das foo ist das zweite Element im Array. Das ist der Offset , hat aber nichts mit dem Index 1 zu tun. Wie Sie sehen können, ist in diesem Array oben Index 1 zugeordnet baz. Es ist falsch anzunehmen, dass nur weil fooes der erste assoziative Schlüssel ist, er irgendetwas mit dem tatsächlichen numerischen Schlüssel 1 zu tun hat. Genau wie somekorreliert nicht mit 2.
Ebenso array_keysfunktioniert für ein gemischtes Array wie oben gezeigt die Lösung, die an anderer Stelle auf dieser Site vorgeschlagen wird, nicht, weil
print_r( array_keys(array('foo', 'foo' => 'bar', 'baz', 'some' => 'value')) );
wird geben
Array
(
[0] => 0
[1] => foo
[2] => 1
[3] => some
)
Wenn du es tust $array[$keys[1]], tust du es wirklich $array['foo']. Aber wenn man den zweiten assoziativen Wert in diesem Array (zuzugreifen will 'some'), können Sie nicht tun , $array[$keys[2]]weil das bewerten würde $array[1]und das ist baz.
Der Versatz eines Elements hängt überhaupt nicht mit seinem Schlüssel oder Wert zusammen
print_r(
array(
100 => 'foo',
'foo' => 'bar',
50 => 'baz',
'some' => 'value'
)
);
bedeutet wirklich
Array
( //key value offset/position
[100] => foo // 0
[foo] => bar // 1
[50] => baz // 2
[some] => value // 3
)
Dies bedeutet, dass das Element bei Offset 0 foo ist, obwohl sein Schlüssel 100 ist. Wenn Sie Elemente aus einem Array durch Offset extrahieren möchten, müssen Sie verwenden
$third = array_splice($array, 2, 1);
echo $third[0]; // baz
Dies würde ein Array erzeugen, das nur das Element an der dritten Position hält.
Oder Sie könnten eine verwenden ArrayIterator. Das ArrayIteratorimplementiert eine SeekableSchnittstelle, mit der Sie nach einer bestimmten Position / einem bestimmten Versatz im Array suchen und dann Folgendes abrufen können:
$iterator = new ArrayIterator($array);
$iterator->seek(3);
echo $iterator->current(); // value