Ich möchte den Wert eines assoziativen Arrays mithilfe des Array-Index des Schlüssel / Wert-Paares festlegen. Beispielsweise:
$my_arr = array( "bling" => "some bling", "bling2" => "lots O bling" );
$my_arr[1] = "not so much bling"; // Would change the value with key bling2.
Wie kann dies erreicht werden, ohne die Schlüsselzeichenfolge zu verwenden?
name of the student
.without using a key string
.array[1] === $array['foo']
aber nicht. Das Array könnte noch einen anderen Wert bei enthalten$array[1]
. Beachten Sie, dass ich nicht sage, dass Ihre Lösung falsch ist. Es ist die Annahme des OP.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
Dies wird geben
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 weilfoo
es der erste assoziative Schlüssel ist, er irgendetwas mit dem tatsächlichen numerischen Schlüssel 1 zu tun hat. Genau wiesome
korreliert nicht mit 2.Ebenso
array_keys
funktioniert für ein gemischtes Array wie oben gezeigt die Lösung, die an anderer Stelle auf dieser Site vorgeschlagen wird, nicht, weilwird geben
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 istbaz
.Der Versatz eines Elements hängt überhaupt nicht mit seinem Schlüssel oder Wert zusammen
bedeutet wirklich
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
Dies würde ein Array erzeugen, das nur das Element an der dritten Position hält.
Oder Sie könnten eine verwenden
ArrayIterator
. DasArrayIterator
implementiert eineSeekable
Schnittstelle, mit der Sie nach einer bestimmten Position / einem bestimmten Versatz im Array suchen und dann Folgendes abrufen können:quelle
array_keys
. Es gibt keine Entität wie einen "nicht assoziativen Schlüssel". Wenn Sie darauf hinweisen wollten, dass Sie den zweiten Zeichenfolgenschlüssel nicht zurückgeben können (indem Sie davon ausgehen, dass das Schlüsselarray nur Zeichenfolgen enthält), ist das, was Sie sagen, richtig.$stringKeys = array_filter(array_keys($array), "is_string");
gibt String-Schlüssel.Während
array_keys()
Zugriff auf die n - te Schlüssel ermöglicht,array_values
werden Sie den n - te Wert.gibt 'Zwei' aus.
Gibt es einen Vorteil gegenüber dem anderen? Nun, die einzige Kleinigkeit, die ich sehen kann, ist die Anzahl der Array-Zugriffe.
Mit müssen
array_keys()
Sie 3.Mit
array_values()
brauchen Sie nur 2.Andererseits sind die Schlüssel normalerweise kleiner und die Daten können sehr verschachtelt sein. Unter dem Strich ist die Verwendung von
array_keys()
wahrscheinlich sicherer.quelle
Wenn das Array groß ist, sind beide
array_keys
undarray_values
verschwenderisch, da sie ein neues Array mit der gleichen Größe wie das Original zuweisen, nur um den n-ten Schlüssel (oder Wert) zu erhalten.array_slice
akzeptiert einen ganzzahligen Offset und arbeitet mit assoziativen Arrays. Sie können es verwenden, um den n-ten Schlüssel in konstanter Zeit abzurufen (und festzulegen) .quelle
Versuche dies. Es funktioniert für Sie.
quelle
Eine andere Möglichkeit besteht darin, es in ein normales Array zu konvertieren:
Wobei "~~~" ein Trennzeichen ist, das in Ihren Daten nicht vorkommt.
Jetzt können Sie mit numerischen Indizes, die den Offsets entsprechen, auf das Array zugreifen.
Wenn Sie Ihr assoziatives Array weiterhin beibehalten müssen, weisen Sie es einfach einer anderen Variablen zu.
quelle