1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

[PHP] Dúvida

Discussão em 'Programação' iniciada por flip__, 29 de Maio de 2009. (Respostas: 3; Visualizações: 520)

  1. flip__

    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á.
     
  2. tonebiclas

    tonebiclas Power Member

    @$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...
     
  3. Armadillo

    Armadillo Folding Member

    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
     
  4. flip__

    flip__ Power Member

    Muito obrigado aos 2, já percebi. :) Foi mesmo burrice, é simples.
     

Partilhar esta Página