Je souhaite définir la valeur d'un tableau associatif à l'aide de l'index de tableau de la paire clé / valeur. Par exemple:
$my_arr = array( "bling" => "some bling", "bling2" => "lots O bling" );
$my_arr[1] = "not so much bling"; // Would change the value with key bling2.
Comment cela peut-il être accompli sans utiliser la chaîne de clé?
name of the student
.without using a key string
.array[1] === $array['foo']
cependant. Le tableau peut encore contenir une autre valeur à$array[1]
. Notez que je ne dis pas que votre solution est fausse. C'est l'hypothèse du PO.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
Cela donnera
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 quefoo
c'est la première clé associative, cela a quelque chose à voir avec la clé numérique réelle 1. Tout commesome
ne correspond pas à 2.De même, pour un tableau mixte comme indiqué ci-dessus, la solution
array_keys
suggérée ailleurs sur ce site ne fonctionnera pas, carva donner
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'estbaz
.Le décalage d'un élément n'a aucun rapport avec sa clé ou sa valeur
signifie vraiment
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
Cela créerait un tableau contenant uniquement l'élément à la troisième position.
Ou vous pouvez utiliser un fichier
ArrayIterator
. IlArrayIterator
implémente uneSeekable
interface qui vous permet de rechercher une position / un décalage spécifique dans le tableau, puis de récupérer cela:la source
array_keys
. Il n'existe pas d'entité telle qu'une "clé non associative". Si vous vouliez souligner que vous ne pouvez pas renvoyer la 2ème clé de chaîne (en supposant que le tableau de clés ne contient que des chaînes), alors ce que vous dites est correct.$stringKeys = array_filter(array_keys($array), "is_string");
donne des clés de chaîne.Tandis que
array_keys()
permet l'accès à la nième clé,array_values
vous donnera la nième valeur.affichera «Deux».
Y a-t-il un avantage de l'un sur l'autre? Eh bien, le seul mineur que je peux voir est le nombre d'accès au tableau.
Avec
array_keys()
vous devez 3.Avec
array_values()
, vous n'avez besoin que de 2.Mais, d'un autre côté, les clés sont normalement plus petites et les données peuvent être extrêmement imbriquées, donc, dans l'ensemble, l'utilisation de
array_keys()
est probablement plus sûre.la source
Si le tableau est grand, les deux
array_keys
etarray_values
seront inutiles car ils alloueront un nouveau tableau de la même taille que l'original, juste pour obtenir la nième clé (ou valeur).array_slice
accepte un offset entier et fonctionne sur des tableaux associatifs. Vous pouvez l'utiliser pour obtenir (et définir) la nième clé en temps constant.la source
Essaye ça. Cela fonctionne pour vous.
la source
Une autre possibilité est de le convertir en un tableau normal:
Où "~~~" est un délimiteur qui n'apparaîtra pas dans vos données.
Vous pouvez maintenant accéder au tableau en utilisant des index numériques égaux aux décalages.
Si vous avez encore besoin de conserver votre tableau associatif, affectez-le simplement à une variable différente.
la source