[PHP] Dúvida

flip__

Power Member
Estou a estudar PHP e surgio-me um problema que não estou a perceber. É o seguinte:

Código:
function add_numbers($numbers)
{[INDENT]if(is_array($numbers))
[/INDENT][INDENT] {
[/INDENT][INDENT][INDENT] for($i=0;$i <sizeof($numbers);$i++)
[/INDENT][/INDENT][INDENT][INDENT] {
[/INDENT][/INDENT][INDENT][INDENT][INDENT] [B][COLOR=Red]@$sum = $sum + $numbers[$i];[/COLOR][/B]
[/INDENT][/INDENT][/INDENT][INDENT][INDENT] }
[/INDENT][/INDENT][INDENT][INDENT] echo $sum;
[/INDENT][/INDENT][INDENT] }
[/INDENT][INDENT] else
[/INDENT][INDENT] {
[/INDENT][INDENT][INDENT] echo “value passed is not an array”;
[/INDENT][/INDENT][INDENT][INDENT] return;
[/INDENT][/INDENT][INDENT] }
[/INDENT]}
Alguém me pode explicar a linha de código assinalada?




No livro dizem que se passar o seguinte:
Código:
$arrayofnumbers = array(100,200);
add_numbers($arrayofnumbers);
Então o resultado é 300.




E que se passar:
Código:
add_numbers(100);
Então o resultado é value passed is not an array.




Quando não é array percebo o resultado que a função dá.

Mas quando é, não percebo como é que soma os 100+200. Aquela linha está-me a fazer confusão.

Obrigado deste já.
 
@$sum = $sum + $numbers[$i];

faz a traçagem....
mas assim sem pensar muito ( com este calor não dá para mais, se tiver mal avisem ):

o ciclo for vai dar duas voltas ( porque o array tem duas posições )

primeira volta do ciclo:
-primeiro $sum começa sem valor...
-a primeira posição do array tem o valor de 100...
-com a expressão "@$sum = $sum + $numbers[$i];", é somado ao $sum o valor da primeira posição do array...
segunda volta do ciclo:
-depois, como $sum já tem o valor de 100, $sum vai ser igual a 100 + os 200 do array...
 
aquando da instrucção "$arrayofnumbers = array(100,200);" o que acontece é que a variavel $arrayofnumbers vai conter 2 valores: 100 e 200.

Ou seja, o conteudo do vector será:
$arrayofnumbers[0] => 100
$arrayofnumbers[1] => 200


Depois, tem-se que o ciclo "for":
Código:
 for($i=0;$i <sizeof($numbers);$i++)
o que acontece aqui é que, o ciclo vai contar quantos valores estão contidos no vector (função sizeof) e para cada uma dessas posições, vai somá-las á variável "$sum".
Ou seja, quando o $i for igual a zero ele vai pegar no $arrayofnumbers[0] e adicionar o seu valor a "$sum" (ou seja: valor de $sum mais o valor do arrayofnumbers[0] -> 0+100=100).

Agora, como o "$sum" já tem o valor de 100, na próxima iteração do ciclo "for", a soma será 100+$arrayofnumbers[1] => 100+200=300


cumps
 
Back
Topo