Diferença entre "as $key => $value" e "as $value" no PHP foreach
$key => $value
faz num ciclo foreach
.
A razão pela qual pergunto é porque ambos os códigos dão a mesma coisa, por isso estou a tentar perceber porque está escrito assim. Aqui está o código:
foreach($featured as $key => $value){
echo $value['name'];
}
isto produz o mesmo que:
foreach($featured as $value) {
echo $value['name']
}
Então a minha pergunta é, Qual é a diferença entre $key => $value
ou apenas $value
no loop foreach
. A matriz é multidimensional, se isso faz a diferença, só quero saber porquê. passar $key
para $value
no circuito foreach
.
7 answers
Bem, o $key => $value
no laço foreach refere-se aos pares de valores-chave em arrays associativos, onde a chave serve como índice para determinar o valor em vez de um número como 0,1,2,... Em PHP, as matrizes associativas são assim:
$featured = array('key1' => 'value1', 'key2' => 'value2', etc.);
No código PHP: $featured
é a matriz associativa sendo loop através de e as $key => $value
significa que cada vez que o loop é executado e seleciona um par chave-valor da matriz, ele armazena a chave no local $key
variável para usar dentro do bloco do laço e o valor na variável local $value
. Assim, para o nosso conjunto de exemplos acima, o laço foreach alcançaria o primeiro par de valores de chave, e se você especificasse as $key => $value
, ele armazenaria 'key1'
na variável $key
e 'value1'
na variável $value
.
Uma vez que você não usa a variável $key
dentro do seu bloco de loop, adicioná-la ou removê-la não altera a saída do loop, mas é melhor incluir o par chave-valor para mostrar que é uma matriz associativa.
Note também que as $key => $value
a designação é arbitrária. Você poderia substituir isso por as $foo => $bar
e funcionaria bem desde que você mudasse as referências variáveis dentro do bloco loop para as novas variáveis, $foo
e $bar
. Mas fazê-las ajuda a manter o rasto do que significam.
$a = array(
"one" => 1,
"two" => 2,
"three" => 3,
"seventeen" => array('x'=>123)
);
Na primeira iteração: $key="one"
e $value=1
.
Às vezes você precisa desta chave ,Se você quiser apenas o valor , você pode evitar usá-la.
Na última iteração : $key='seventeen'
e $value = array('x'=>123)
para obter o valor do primeiro elemento deste valor array
, você precisa de um key
, x neste caso: $value['x'] =123
.
key => value
em foreach
laço deve ser mencionado. Suponha que você gostaria de adicionar um novo/sub-elemento a um item existente (noutra chave) na lista $features
. Deve fazer o seguinte:
foreach($features as $key => $feature) {
$features[$key]['new_key'] = 'new value';
}
Em vez disto:
foreach($features as $feature) {
$feature['new_key'] = 'new value';
}
A diferença aqui é que, no primeiro caso, você está acessando o sub-valor do array através do próprio array principal com um chave para o elemento que está sendo apontado pelo ponteiro array.
Enquanto no segundo ( que não funciona para este propósito) Você está a atribuir o sub-valor na matriz a uma variável temporária $feature
que está desactivada após cada iteração de laço.
A diferença é que no
foreach($featured as $key => $value){
echo $value['name'];
}
És capaz de manipular o valor de cada iteração a partir do seu par de valores-chave. Como @djiango respondeu, Se você não estiver manipulando cada valor $key
, o resultado do loop será exatamente o mesmo que
foreach($featured as $value) {
echo $value['name']
}
Fonte: Você pode lê-lo a partir da documentação do PHP:
O primeiro formato faz loops sobre o array dado por array_ expression. Em cada iteração, o valor >da o elemento actual é atribuído a $value e o ponteiro interno da matriz é avançado por >one (por isso, na próxima iteração, você estará a olhar para o próximo elemento).*
O segundo formulário irá adicionalmente atribuir a chave do elemento actual à variável $key em >cada iteração.
Se os dados que está a manipular são, digamos, matrizes com teclas personalizadas, pode imprimi-los no ecrã assim:
$array = ("name" => "Paul", "age" => 23);
foreach($featured as $key => $value){
echo $key . "->" . $value;
}
Print:
name->Paul
age->23
$array = (0=>'123',1=>'abc','test'=>'hi there!')
Em cada loop, cada loop seria:
$key = 0, $value = '123'
$key = 1, $value = 'abc'
$key = 'test', $value = 'hi there!'
É óptimo para aqueles momentos em que precisamos de saber a chave do array.
Se a matriz se parecer com:
- $featured ["fruit"] = "orange";
- $featured ["fruit"] = "banana";
- $featured ["vegetable"] = "carrot";
A chave $deterá o tipo (fruta ou legumes) para cada valor da matriz (laranja, banana ou cenoura)
Aqui $key conterá a $key associada a $value em $featured . A diferença é que agora tens essa chave.
array("thekey"=>array("name"=>"joe"))
Aqui o valor é
array("name"=>"joe")
$a chave é "a chave"