Quiero establecer el valor de una matriz asociativa usando el índice de matriz del par clave / valor. Por ejemplo:
$my_arr = array( "bling" => "some bling", "bling2" => "lots O bling" );
$my_arr[1] = "not so much bling"; // Would change the value with key bling2.
¿Cómo se puede lograr esto sin usar la cadena de claves?
name of the student
.without using a key string
.array[1] === $array['foo']
Aunque eso no significa eso . La matriz aún podría contener otro valor en$array[1]
. Tenga en cuenta que no estoy diciendo que su solución sea incorrecta. Es la suposición del OP.No existe correlación entre las claves de índice numéricas y asociativas.
Cuando dice que desea establecer el valor de una matriz asociativa utilizando el índice de matriz de la clave / valor , entonces debe usar la clave dada, la configuración
$array[1]
no es lo mismo que la configuración$array['foo']
.Considere esta matriz
Esto le dará
Foo es el segundo elemento de la matriz. Ese es el desplazamiento , pero no tiene nada que ver con el índice 1. Como puede ver, en esa matriz anterior, el índice 1 está asociado
baz
. Es incorrecto asumir que solo porquefoo
es la primera clave asociativa tiene algo que ver con la clave numérica real 1. Al igualsome
que no se correlaciona con 2.Del mismo modo, para una matriz mixta como la que se muestra arriba, la solución
array_keys
sugerida en otra parte de este sitio no funcionará, porquedaré
Entonces, cuando lo haces
$array[$keys[1]]
, realmente lo estás haciendo$array['foo']
. Pero si quisiera acceder al segundo valor asociativo en esa matriz ('some'
), no puede hacerlo$array[$keys[2]]
porque eso evaluaría a$array[1]
y eso esbaz
.La compensación de un elemento no tiene ninguna relación con su clave o valor
realmente significa
lo que significa que el elemento en el desplazamiento 0 es foo aunque su clave es 100. Si desea extraer elementos de una matriz por desplazamiento, debe usar
Esto crearía una matriz que contiene solo el elemento en la tercera posición.
O podrías usar un
ArrayIterator
. ElArrayIterator
implementa unaSeekable
interfaz que le permite buscar una posición / desplazamiento específico en la matriz y luego buscar eso:fuente
array_keys
. No existe una entidad como una "clave no asociativa". Si quería señalar que no puede devolver la clave de la segunda cadena (asumiendo que la matriz de claves solo contiene cadenas), entonces lo que dice es correcto.$stringKeys = array_filter(array_keys($array), "is_string");
da claves de cadena.Si bien
array_keys()
permite el acceso a la enésima tecla,array_values
le dará el enésimo valor.generará 'Dos'.
¿Hay alguna ventaja de uno sobre el otro? Bueno, el único menor que puedo ver es el número de accesos a la matriz.
Con
array_keys()
usted necesita 3.Con
array_values()
, solo necesitas 2.Pero, por otro lado, las claves son normalmente más pequeñas y los datos podrían estar enormemente anidados, por lo que, a fin de cuentas,
array_keys()
probablemente sea más seguro usar el .fuente
Si la matriz es grande, ambos
array_keys
yarray_values
serán un desperdicio ya que asignarán una nueva matriz del mismo tamaño que la original, solo para obtener la enésima clave (o valor).array_slice
acepta un desplazamiento de entero y funciona en matrices asociativas. Puede usarlo para obtener (y configurar) la enésima clave en tiempo constante.fuente
Prueba esto. Funciona para ti.
fuente
Otra posibilidad es convertirlo en una matriz normal:
Donde "~~~" es un delimitador que no aparecerá en sus datos.
Ahora puede acceder a la matriz utilizando índices numéricos iguales a las compensaciones.
Si aún necesita conservar su matriz asociativa, simplemente asígnela a una variable diferente.
fuente