Quero definir o valor de uma matriz associativa usando o índice da matriz do par chave / valor. Por exemplo:
$my_arr = array( "bling" => "some bling", "bling2" => "lots O bling" );
$my_arr[1] = "not so much bling"; // Would change the value with key bling2.
Como isso pode ser feito sem usar a string de chave?
name of the student
.without using a key string
.array[1] === $array['foo']
. A matriz ainda pode conter outro valor em$array[1]
. Observe que não estou dizendo que sua solução esteja errada. É a suposição do OP.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
Isso vai dar
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 porquefoo
é a primeira chave associativa, isso tem algo a ver com a chave numérica real 1. Assim comosome
não se correlaciona com 2.Da mesma forma, para uma matriz mista como mostrado acima, a solução com
array_keys
sugerida em outro lugar neste site não funcionará, porquedarei
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 prontobaz
.O deslocamento de um elemento não está totalmente relacionado à sua chave ou valor
realmente significa
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
Isso criaria uma matriz contendo apenas o elemento na terceira posição.
Ou você pode usar um
ArrayIterator
. OArrayIterator
implementa umaSeekable
interface que permite buscar uma posição / deslocamento específico na matriz e, em seguida, buscar:fonte
array_keys
. Não existe uma entidade chamada "chave não associativa". Se você quisesse apontar que não pode retornar a segunda chave de string (assumindo que a matriz de chaves contém apenas strings), então o que você diz está correto.$stringKeys = array_filter(array_keys($array), "is_string");
dá chaves de string.Embora
array_keys()
permita o acesso à enésima chave,array_values
fornecerá o enésimo valor.irá imprimir 'Two'.
Existe uma vantagem de um sobre o outro? Bem, o único menor que posso ver é o número de acessos à matriz.
Com
array_keys()
você precisa de 3.Com
array_values()
, você só precisa de 2.Mas, por outro lado, as chaves são normalmente menores e os dados podem ser muito aninhados, portanto, em geral, usar o
array_keys()
é provavelmente mais seguro.fonte
Se o array for grande, ambos
array_keys
earray_values
serão um desperdício, pois eles alocarão um novo array do mesmo tamanho que o original, apenas para obter a enésima chave (ou valor).array_slice
aceita um deslocamento de inteiro e funciona em matrizes associativas. Você pode usá-lo para obter (e definir) a enésima chave em tempo constante.fonte
Experimente isso. Funciona para você.
fonte
Outra possibilidade é convertê-lo em uma matriz normal:
Onde "~~~" é um delimitador que não ocorrerá em seus dados.
Agora você pode acessar o array usando índices numéricos iguais aos offsets.
Se você ainda precisa reter seu array associativo, apenas atribua-o a uma variável diferente.
fonte