Analise o trecho de código em PHP. <?php $arr = [...
<?php $arr = [0 => 7, 1 => 41, 2 => 11, 3 => 18, 4 => 50, 'aluno' => "João", 'cpf' => '999.999.999-99']; for ($i=0;$i<count($arr);$i++) {
echo "<br />".$i.": ".$arr[$i]; } ?>
Em relação ao trecho de código em PHP, marque a afirmativa correta.
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Alternativa correta: A
A questão pede para analisarmos um trecho de código em PHP que declara um array associativo e em seguida tenta iterar sobre ele usando um laço for. O array $arr é declarado com uma mistura de chaves numéricas e strings, e o laço for é utilizado com a intenção de exibir todos os elementos.
A alternativa A é a correta pois afirma que apenas os elementos com índice de 0 a 4 (0, 1, 2, 3 e 4) serão exibidos no laço iterativo 'for'. Isso se deve ao fato de que a função count() quando usada em um array associativo como o apresentado, vai retornar a quantidade de todos os elementos, incluindo aqueles cujas chaves são strings. Entretanto, o loop for está incrementando a variável $i de 0 até um valor menor que count($arr), e tenta acessar os elementos do array usando $arr[$i], o que só é válido para chaves numéricas.
No momento em que o índice numérico ultrapassa 4, o PHP tentará acessar índices que não existem no array (5 e 6, por exemplo), já que as chaves subsequentes são strings ('aluno' e 'cpf'). Portanto, ao tentar acessar $arr[5] e $arr[6], a execução não encontrará esses índices e emitirá um notice de índice indefinido, mas não interromperá a execução do script. Isso explica o porquê das demais alternativas estarem incorretas e confirma a corretude da alternativa A.
É importante salientar que o PHP pode declarar arrays usando tanto a sintaxe curta []
quanto o construtor array()
, portanto a alternativa B está incorreta ao afirmar que apenas o construtor array()
é válido. A alternativa C também está equivocada ao sugerir que os elementos com chaves 'aluno' e 'cpf' podem ser acessados pelos índices 5 e 6, o que contraria a própria natureza de um array associativo em PHP. Por fim, a alternativa D está incorreta ao afirmar que haverá um Erro Fatal (Fatal Error), pois o PHP irá somente emitir um 'notice' e continuar a execução.
Compreender a diferença entre arrays numéricos e associativos e saber como iterar sobre eles é fundamental para resolver questões de programação que envolvem estruturas de dados em PHP.
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
a) Correta, gabarito da questão
b) Incorreta, após o PHP 5.4 não é obrigatória a declaração do construtor array(). Talvez vc pergunte: "Mas max no enunciado não cita a versão", não cita eu sei, mas quem sabe o edital cite! e mesmo se o editar não citar, PHP 5.3 é de 2009 e foi substituído em 2012( PHP 5.4), poxa mais de 9 anos de diferença, não vejo probabilidade do examinador aceitar o recurso
c) Incorreta, as chaves aluno e cpf já são os índices para acessar, respectivamente, os valores "João" e '999.999.999-99'
d) Incorreta, o count, dentro do laço for, receberá o valor 7 , tamanho do array, e irá percorrer as chaves inteiras, lembrando que chaves strings poderão ser convertidas automaticamente para chaves int.
será apresentado os 4 primeiros elementos, em seguida apresentará warnings, para aqueles que estão sem os índices numéricos na ordem correspondente
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo