Funções de Arrays em PHP

Neste tutorial de nosso curso de PHP, vamos estudar diversas funções e operações que são possíveis de se fazer usando arrays.

Estudar arrays pela apostila de PHP

Operações com Arrays

União: $a + $b
O array $b é anexado ao final do array $a, menos os conflitos de chaves

Igualdade: $a == $b
Verdade se $a e $b contém os mesmos elementos

Identidade: $a === $b
TRUE se $a e $b contém os mesmos elementos e na mesma exata ordem

Desigualdade: $a != $b ou $a <> $b
TRUE se $a e $b não contém os mesmos elementos, ou seja, ao menos um difere

Não-identidade: $a !== $b
Verdadeiro caso $a e $b não contenham os mesmos elementos na mesma ordem

Funções de Adição e remoção de elementos em Arrays

Adiciona elementos ao final: array_push()

Sintaxe:
int array_push(array alvo , variáveis);

Seja o array: $carros=array("gol", "celta");
Se fizermos: array_push($carros, "civic", "corolla")
Vai ficar: $carros=array("gol", "celta", "civic", "corolla");

Adiciona elementos ao início: array_unshift()

Funciona igual ao array_push(), mas ao invés de adicionar ao final, adiciona no começo.
Seja o array: $carros=array("gol", "celta");
Se fizermos: array_unshift($carros, "civic", "corolla")
Vai ficar: $carros=array("civic", "corolla", "gol", "celta");

Retira o último elemento: array_pop()

Retira e retorna o último elemento do array.

Sintaxe:
variavel array_pop(array alvo);

Seja o array: $carros=array("gol", "celta");
Se fizermos: $carro = array_pop($carros)
Temos: $carro = "celta";

Retira o primeiro elemento: array_shift()

Funciona igual o array_pop(), mas ao invés de retirar o último elemento, retira o primeiro.

Se estiver usando arrays numéricos, todos vão 'descer' um degrau numérico.
Se for em arrays associativos, nada acontece.

Seja o array: $carros=array("gol", "celta");
Se fizermos: $carro = array_shift($carros)
Temos: $carro = "gol";

Localizando Elementos em um Array

Localizar se algo está no array: in_array()

Sintaxe:
boolean in_array(algo, $array);
Retorna TRUE se algo está no $array e FALSE caso não esteja.

Seja $carros=array("gol", "celta", "civic", "corolla");
Se fizermos:
in_array("civic", $carros) -> retorna verdadeiro
in_array("fox", $carros) -> retorna falso

Localizar key: array_key_existis()
Sintaxe:
boolean array_key_existis(key, $array)

Retorna TRUE se key existe no array e FALSE se não existe.

Ordenando Arrays

Classificando arrays: sort()

Classifica o array em ordem alfabética ou numérica.

Seja: $numeros = array(2,3,1)
Fazendo: sort($numeros)
Fica: $numeros = arrau(1,2,3)

Seja $estados = array('SP','CE','AL')
Fazendo: sort($estados)
Fica: $estados = array('AL', 'CE', 'SP')

Ou seja, o método sort() classifica alfa ou numericamente os valores de elementos de um array.

Sabe aqueles filtros:
"Ordenar por mais procurado"
"Ordenar por mais barato"

Pois é, é tudo array e tudo usa sort().
Esse PHP é mesmo poderoso, não é?

Classificando em ordem contrária: rsort()

Inverso da sort()

Classificação nativa: natsort()

Procura fazer uma classificação nativa, como uma pessoa faria.

Seja o array:
$fotos=array("foto2.jpg", "foto3.jpg", "foto1.jpg");
Fazendo: natsotr($fotos);
Fica:$fotos=array("foto1.jpg", "foto2.jpg", "foto3.jpg");

Mais funções

Combinando keys e values: array_combine()

Sintaxe:
array array_combine( array $key, array $value)

Ele combina um array de que são serão as keys, o $key, com um que são os valores, o $value.
Seja:
$tipo=array('popular', 'sedan');
$modelo=array('gol', 'civic');
Se fizermos: $carros = array_combine($tipo, $modelo);

E dermos um print_r:
Array ( [popular] => gol [sedan] => civic )

Número aleatório de elementos: array)rand()

Sintaxe:
elementos array_rand($array, numero_aleatorio_elementos);

Ele pega um array e retorna um número aleatório de elementos.
Seja $carros=array("gol", "celta", "civic", "corolla");
Se fizermos:
$aleatorios = array_rand($carros, 2)

Aqui retornou: Array ( [0] => 0 [1] => 3 )
Ou seja, "gol" e "corolla", ele já dá a resposta em array associativo.

Embaralhar elementos: shuffle()

void shuffle(array input_array)

Simplesmente embaralha os elementos de um array.
Por exemplo, se tiver: $carros=array("gol", "celta", "civic", "corolla");
E fizer: shuffle($carros);

O resultado vai ser:
Array ( [0] => celta [1] => gol [2] => corolla [3] => civic )

Somando elementos: array_sum()
array_sum($array)

Retorna a soma de todos os items que forem somáveis, ou seja, que foram inteiros ou floats.
Seja:
$meuArray = array(21, "rush", 12);
E fizermos: $soma = array_suma($meuArray);
O resultado séra: $soma=33

Falamos apenas de algumas poucas funções que podemos fazer com arrays, para ver mais, acesse:
https://secure.php.net/manual/pt_BR/ref.array.php

O Loop FOREACH - Laço de arrays

Neste tutorial de nossa apostila de PHP, vamos aprender o que é e como usar o FOREACH, laço especialmente criado para se usar com arrays.

Obrigatório: Baixe a apostila PHP Progressivo

O Laço foreach as ... para arrays numéricos

Como se já não bastasse o número de laços (while, do while e for) existentes na linguagem, os criadores do PHP desenvolveram um especialmente para se usar com arrays, o foreach as.

Vamos pegar o array:
$carros = array('gol', 'celta', 'fox', 'corolla', 'civic');

Para exibir esses carros usando foreach, fazemos:
 <?php
  $carros = array('gol', 'celta', 'fox', 'corolla', 'civic');
  
  foreach($carros as $car)
   echo "$car <br />";
 ?>
O que ocorre é o seguinte...fazemos com que o array $car assuma o valor de cada elemento do array maior $carros.

Assim, o laço foreach percorre todos os elementos do array $carros, onde podemos trabalhar da maneira que quisermos com cada item.

O Loop foreach as ... para arrays associativos

Embora não sejam estruturas enumeradas e logicamente organizadas, é possível usar o laço foreach com arrays associativos também.

Vamos definir um array de chaves e valores da seguinte forma:
$carros['popular'] = 'celta';
$carros['sedan'] = 'corolla';
$carros['premium'] = 'bmw';
$carros['suv'] = 'hr-v';

Para exibir da chave e cada valor, com foreach, um por linha, fazemos:
 <?php
  $carros['popular'] = 'celta';
  $carros['sedan'] = 'corolla';
  $carros['premium'] = 'bmw';
  $carros['suv'] = 'hr-v';
  foreach($carros as $chave => $valor)
   echo "$chave : $valor <br />";
 ?>
A variável $chave vai pegar o valor de cada key do array $carros e a variável $valor o value de cada elemento correspondente, assim podemos acessar e alterar esses elementos da maneira que quisermos.

Note que é possível percorrer arrays gigantescos, medonhos e ir fazendo alterações, copiando, ou o que for, de uma maneira muito simples e totalmente automatizada com o laço foreach as...que inglês significa "para cada ... como..."

Ou seja, "para cada elemento do array, trate como"...e o foreach vai sozinho pegando um por um, todos os elementos do array.

A função range () no PHP

Neste tutorial, vamos aprender a usar a função range(), muito útil para se usar com arrays em PHP.

Recomendado: Baixar apostila de PHP

A função range()

Muitas vezes, é necessário preencher um array com números, ordenados.
Por exemplo, criar um array de 100 elementos, para representar os funcionários de uma empresa e inicializar eles manualmente se torna uma tarefa enfadonha.

Imagina nas lojas virtuais que você vai criar, com milhares de produtos a venda?

A função range() é perfeita para se trabalhar com arrays e ela possui a seguinte sintaxe:
array range(int menor, int maior, int pulo);

Esse pulo, é opcional.
Mas é basicamente assim, você vai fornecer um valor mínimo (menor) e um máximo (maior) e ela te retorna um objeto do tipo array

Por exemplo, vamos criar um dado, um array que vai de 1 até 6:
$dado = range(1, 6);

Pronto, $dado já um objeto do tipo array com 6 elementos (de índices que vão de 0 até 5 - sempre se lembre, em computação se começa contando do 0 e não do 1).

Função range() com salto

Vamos supor que você queira um array com elementos de 1 até 100, mas de 2 em 2.
Ou seja, seus elementos vão ser: 1, 3, 5, 7, 9, ..., 99

Basta fazer: $meuArray = range(1, 100, 2);

Primeiro o ponto de partida, depois o ponto máximo que ele pode chegar e o salto que vai ficar dando como terceiro argumento.

Função range() para Letras
É possível usar a função range com letras também.

Para gerar o alfabeto minúsculo:
$alfaminusculo = range('a', 'z');

Para gerar o alfabeto maiúsculo:
$alfamaiusculo = range('A', 'Z');

E prontinho, automaticamente vai ter um array totalmente preenchido pronto para você usar, seja lá qual for sua necessidade, e acredite, várias vezes você vai precisar usar a range.

Arrays Associativos em PHP

Neste tutorial de nossa apostila de PHP, vamos aprender o que são, como criar, usar e acessar os arrays associativos em PHP.

Estudar arrays pela apostila

Arrays Associativos em PHP

Vimos no tutorial anterior sobre como criar arrays de índices numéricos, como trabalhar com arrays que possuem índices enumerados.

Porém, as vezes fica difícil trabalhar com números, é decorativo pois você precisa lembrar que número é associado a cada elemento e isso também deixa difícil para outros programadores darem manutenção em seu código.

E é aí que entram os arrays associativos, que não precisam de números para associar determinados items, você pode associar qualquer chave (key) para relacionar a qualquer valor (value).

Como criar um array associativo

Vamos supor que você foi contratado numa concessionária e vai precisar criar um array com os carros da sua loja, mas você vai usar arrays associativos. Nosso array é o $array.

Em vez de números, vamos dar nomes as keys:
$carros['popular'] = 'celta';
$carros['sedan'] = 'corolla';
$carros['premium'] = 'bmw';
$carros['suv'] = 'hr-v';

Pronto.
Quer se referir ao Celta, que é um carro popular? Acesse o item do array:
$carros['popular'];

Como imprimir arrays associativos

Vamos imprimir esse array:
print_r($carros);

O resultado é:
Array ( [popular] => celta [sedan] => corolla [premium] => bmw [suv] => hr-v )

Veja o motivo de ser associativo:
[popular] => celta
[sedan] => corolla
[premium] => bmw
[suv] => hr-v

Os nomes da esquerda são as keys e da direita os values.
Aí fica mais fácil entender essa 'associação' dos pares chave-valor.

Arrays em PHP: Como criar, Acessar e Exibir elementos

Neste tutorial de PHP, vamos finalmente aprender como criar nossos arrays. Também veremos como acessar seus elementos e exibir (printar) um array.

Estudar arrays pela Apostila de PHP

Como criar um Array

Primeiro, vamos te ensinar como criar um array numericamente indexado, que são os mais comuns na maioria das linguagens de programação.

A sintaxe é:
$nome_variavel = array (elemento0, elemento1, elemento2, ...)

Ou seja, basta escolhermos o nome da variável, usar a palavra-chave array, abrir parêntesis e entre vírgulas fornecer os elementos de um array.

Vamos criar um array de carros:
$carros = array('gol', 'celta', 'fox', 'corolla', 'civic');

Uma outra maneira de inicializar um array seria:
$carros[]='gol';
$carros[]='celta';
$carros[]='fox';
$carros[]='corolla';
$carros[]='civic';

Note que tem um par de colchetes após o nome da variáveis, ela quer dizer que estamos lidando com um array, e não com uma variável escalar simples.
Cada vez que fazemos isso, estamos adicionando um elemento so array $carros.

Como Acessar Elementos de um Array

Para os programadores, a contagem começa do 0, sempre.
Assim, o primeiro elemento, é o elemento 0, e é o 'gol'.
Elemento 0 -> 'gol'
Elemento 1 -> 'celta'
...
Elemento 4 -> 'civic'

Para acessar o primeiro elemento, fazemos:
$carros[0] -> aqui está armazenada a string 'gol'
$carros[1] -> aqui está armazenada a string 'celta'
...
$carros[2] -> aqui está armazenada a string 'corolla'

Como Exibir Elementos de um Array

Imagina que tivéssemos a variável
$meuCarro='gol'

E você quisesse escrever em PHP: "Meu carro é um $meuCarro";
Você entenderia perfeitamente, não é verdade?

Aqui, com arrays, é a mesma coisa, a diferença é em vez de uma variável comum, a do array possui um colchete de um número associado.
Ficaria: "Meu carro é um $carros[0]"

Prontinho.
A diferença é que você tem um array com uma gama enorme de dados.

Como imprimir um Array: print_r

Existe uma função especial, a print_r() que serve para imprimir arrays de uma maneira mais bonita e organizada.

Teste: print_r($carros)
O resultado vai ser:
Array ( [0] => gol [1] => celta [2] => fox [3] => corolla [4] => civic )

Exercício de Array

Você foi contratado para ser um desenvolvedor web. Com seu salário, vai comprar uma BMW.
Adicione "BMW" ao array de carros e diga que possui uma BMW acessando o elemento do array.

Resposta:
$carros[] = 'BMW';
echo "Eu tenho uma $carros[5]";

Bem simples esses arrays, não?

Array em PHP - O que é ? Para que serve? Onde se usa?

Neste tutorial de nosso Curso de PHP, vamos dar uma introdução sobre o uso dos Arrays, falar o que são, para que servem, como e onde são usados, bem como criar alguns.

Recomendamos: Estudar pela Apostila de PHP

Array em PHP - Por que usar?

Até o momento, nossas variáveis serviam para armazenar uma coisa apenas de cada vez.
Uma número, uma string, um float...

As vezes, pedíamos 2, 3 até 5 informações ao usuário, até aí, ok.
Mas e se você for contratado para criar o sistema web de uma faculdade com mil alunos.

Vai criar mil variáveis?
Se cada aluno tiver 10 matérias? Vai criar 10 mil variáveis?

Assim não pode, assim não dá, e é aí que entram os arrays!

Arrays em PHP - O que é?

Veja os arrays como um conjunto ordenado de alguma coisa.
Por exemplo, uma sala de aula é um array de estudantes.

Uma concessionária, é um array de carros.
Pessoas na porta de uma boate, um array de clientes querendo entrar.

Arrays são um bloco de estruturas menores, parecidas entre si, que estão de alguma maneira ordenada, seja numericamente ou por uma chave (key).

Arrays em PHP - Onde são usados ?

Sabe aqueles pães de padaria, assim que saem de forma, todos grudados? São exemplos perfeitos de um array, onde cada pão é um elemento do array.

Então, em vez de trabalhar declarando mil variáveis na sua faculdade, você declara um array com mil elementos, onde cada elemento desse representa a nota de um aluno.

Imagine agora um sistema bancário, com milhões de clientes. Existe um array, onde cada cliente é um bloco desse array.

Um array pode conter um inteiro, um float, uma string, outro array (arrays multidimensionais), objetos de qualquer tipo...arrays são estruturas para se trabalhar com muita informação, de maneira rápida, fácil e organizada, como vamos ver.

Vamos ver como declarar e acessar os elementos de um array no próximo tutorial.

Quantos dígitos tem um número? Script em PHP

13. Faça uma função que informe a quantidade de dígitos de um determinado número inteiro informado.

Questão de nossa lista de exercícios de funções em PHP.

A Função strlen()

Quando o usuário digita algo via formulário, ele está introduzindo uma string.
Assim, ao invés de digitar o número 2112, ele está digitando a string:
"2112"

Então, para calcular o número de dígitos, temos que calcular tamanho de caracteres da string, e para isso usamos a função strlen() (string length):
  function tamanho($n){
   return strlen($n);
  }

Número de dígitos de um número

E se ao invés de uma string for um número?
Simples, transforma em string.

Se $n for um número, transformamos ele em string assim:
$n = (string)$n

Ou assim:
$n .=""

Depois é só aplicar como argumento na função strlen.

Números perfeitos em PHP (script)

Neste tutorial do nosso curso de PHP, vamos resolver uma questão de nossa lista de exercício de funções:


7. Um número é dito perfeito quando ele é igual a soma de seus fatores. Por exemplo, os fatores de 6 são 1, 2 e 3 (ou seja, podemos dividir 6 por 1, por 2 e por 3) e 6=1+2+3, logo 6 é um número perfeito. Escreva uma função que recebe um inteiro e dizer se é perfeito ou não. Em outra função, peça um inteiro n e mostre todos os números perfeitos até n.

Como detectar números perfeitos

Vamos receber um número $n do usuário.

Dentro da função soma(), vamos ter uma variável chamada $divisores, que inicialmente é 0, ela vai receber a soma de todos os divisores.

Depois, com um laço, vamos dividir o número do usuário por 1, por 2, por 3...até por $n-1
Cada vez que for divisor, somamos esse números na $divisores.

Ao final da função, retornamos $divisores, que é a soma dos divisores.

Fora da função, verificamos se $n é igual ao retorno da função, se for, o número é dito perfeito:
<html>
 <head>
  <title>Apostila PHP Progressivo</title>
 </head>
 <body>
 <form action=ae method="get">
  Numero<input type="number" name="numb" /><br />
  <input type="submit" name="submit" value="Testar" />
 </form> 
 <?php
  $n = $_GET['numb'];
  
  if($n == soma($n))
   echo "É perfeito";
  else
   echo "Não é perfeito";
   
  function soma($n){
   $divisores=0;
   for($count=1 ; $count<$n ; $count++)
    if($n % $count==0)
     $divisores += $count;
   return $divisores;
  }
 ?>
 </body>
</html>
Teste com alguns números perfeitos:
6, 28, 496 e 8.128

Jogo em PHP: Adivinhe o Número

Crie um script de um game. O PHP vai gerar um número entre 1 e 10, e você vai ficar tentando adivinhar que número foi esse.
Se acertar, diz que acertou e mostra o número.
Se errar, diz que errou, e mostra o número sorteado.

Jogo em PHP

Primeiro, começamos pedindo um número ao jogador, que vai ficar armazenado na variável $palpite.

Depois, geramos um número aleatório entre 1 e 10 através da função rand() e armazenamos tal valor na variável $resposta.

Agora é só comprar os valores de $palpite e $resposta.
Se forem iguais, dizemos que acertou!
Se forem diferentes, dizemos que errou e qual foi o número sorteado.

Veja o código do jogo:
<html>
 <head>
  <title>Apostila PHP Progressivo</title>
 </head>
 <body>
 <form action="" method="get">
  PHP gerou um número entre 1 e 10! Tente adivinhar!<br />
  Palpite:<input type="number" name="number" /><br />
  <input type="submit" name="submit" value="Calcular" />
 </form> 
 <?php
  $palpite = $_GET['number'];
  $resposta = rand(1,10);

  if($palpite==$resposta)
   echo "Acertou miseravi! Era $resposta!";
  else
   echo "Errou! Era $resposta !";
 ?>
 </body>
</html>
Agora é só upar esse jogo pro seu site e desafiar seus colegas pra ver quem acerta de primeira.

Como gerar números aleatórios em PHP: Função rand()

Neste tutorial de nosso curso de PHP, vamos aprender a gerar qualquer tipo de número aleatório através da função rand() do PHP.

Veja: Apostila de PHP completa para download

Números Aleatórios: Função rand()

Você já viu aqueles captchas malucos ou sistemas que geram códigos para você confirmar no celular ou mesmo senhas aleatórias pra você?

Pois é, gerar valores aleatórios é algo muito importante mesmo no mundo da programação, e o lindo e maravilhoso PHP já possui uma função que faz tudo isso por nós, de maneira automática, é a função rand().

Dê um:
echo rand()

E fique atualizando a página.
Várias, várias vezes.

Vai ver que cada vez que atualiza, aparece um número diferente.
Esse número vai de 0 até getrandmax()

Aqui, esse getrandmax() deu 2147483647, e aí?

Gerando números aleatórios em um intervalo

A função rand() é tão versátil que você pode definir intervalos que você deseja gerar.
Por exemplo, para gerar 0 ou 1 para você brincar de par ou ímpar, faça:
rand(0,1)

Se você quiser simular lançamento de dados, faça:
rand(1,6)

Que ela vai gerar os números 1, 2, 3, 4, 5 e 6 aleatoriamente.

E se quiser um número quebrado? Entre 0.0 e 1.0?
Faça: rand(0,1)/10

Entendeu a lógica ?

Exercício: Criando um jogo em PHP

Crie um script de um game. O PHP vai gerar um número entre 1 e 10, e você vai ficar tentando adivinhar que número foi esse.
Se acertar, diz que acertou e mostra o número.
Se errar, diz que errou, e mostra o número sorteado.

No próximo tutorial vamos te ensinar como fazer esse jogo em PHP.
Como fazer um jogo em PHP

Mais fonte de estudos:
http://php.net/manual/pt_BR/function.rand.php

Conversão Celsius para Fahrenheit e vice-versa em PHP

Neste tutorial de PHP, vamos aprender como fazer a conversão entre Celsius e Fahrenheit, e vice-versa, utilizando nossos conhecimentos de funções em PHP.

Veja: Apostila de PHP

Exercício de PHP

Vamos resolver o exercício da lista:
  1. Escreva um script que pergunta ao usuário se ele deseja converter uma temperatura de grau Celsius para Fahrenheit ou vice-versa. Se ele digitar 1, é de Celsius para Farenheit, se digitar 2 é de Fahrenheit para Celsius, outro valor mostre uma mensagem de erro. Para cada conversão, chame a função correta.

Conversão Celsius e Fahrenheit

Vamos primeiro pedir a opção do usuário.
Se digitar 1, é porque ele vai digitar a temperatura em grau Celsius e quer Fahrenheit.
Se digitar 2, é porque ele vai digitar em Fahrenheit e quer a temperatura em Celsius,

No script PHP, tratamos essa opção.
Se ele escolher 1, chamamos a opção CtoF() e passamos o argumento $temperatura.
Se escolher 2, chamamos a função FtoC() e passamos o argumento $temperatura também.

As fórmulas são:
Conversão de Fahrenehit para Celsius em PHP

Script em PHP da Conversão

<html>
 <head>
  <title>Apostila PHP Progressivo</title>
 </head>
 <body>
 <form action=ae method="get">
  Digite 1 para: Celsius para Farenheit<br />
  Digite 2 para: Farenheit para Celsius<br />
  <input type="number" name="opt" /><br />
  Temperatura:<input type="number" name="number" /><br />
  <input type="submit" name="submit" value="Calcular" />
 </form> 
 <?php
  $op = $_GET['opt'];
  $temp = $_GET['number'];
  
  if($op==1)
   echo "Temperatura em Farenheit: ".CtoF($temp);
  elseif($op==2)
   echo "Temperatura em Celsius: ".FtoC($temp);
  else
   echo "Opção inválida";
   
  
  function CtoF($temperatura){
   return ($temperatura*9/5) + 32;
  }
  function FtoC($temperatura){
   return ($temperatura-32)*5/9;
  }
 ?>
 </body>
</html>
Prontinho.
Veja que bacana e organizado nosso script.

Agora você pode até colocar seu site no ar, que faz essa conversão, pois está funcionando perfeita e maravilhosamente bem.

Você pode ir trabalhar numa estação de serviços meteorológicos e não vai mais precisar criar esse código de novo, pois já programou essa função, agora é só guardar esse script e usar quando quiser.

Pode guardar como "conversao.php" e prontinho, sempre que quiser usar é só dar um require_once "conversao.php" e fazer suas conversões a vontade

Show esse PHP, não? 

Lista de exercícios de Funções em PHP

  1. Escreva um script que pergunta ao usuário se ele deseja converter uma temperatura de grau Celsius para Farenheit ou vice-versa. Se ele digitar 1, é de Celsius para Farenheit, se digitar 2 é de Farenheit para Celsius, outro valor mostre uma mensagem de erro. Para cada conversão, chame a função correta.
    Conversão Celsius-Fahrenheit
  2. Faça um programa, com uma função que necessite de três argumentos, e que forneça a soma desses três argumentos através de uma função. Seu script também deve fornecer a média dos três números, através de uma segunda função que chama a primeira.
  3. Faça um programa que recebe três números do usuário, e identifica o maior através de uma função e o menor número através de outra função.
  4. A probabilidade de dar um valor em um dado é 1/6 (uma em 6). Faça um script em PHP que simule 1 milhão de lançamentos de dados e mostre a frequência que deu para cada número.
  5. A série de Fibonacci é uma sequência de números, cujos dois primeiros são 0 e 1. O termo seguinte da sequência é obtido somando os dois anteriores. Faça uma script em PHP que solicite um inteiro positivo ao usuário, n. Então uma função exibe todos os termos da sequência até o n-ésimo termo. Use recursividade.
  6. Crie uma função que recebe um inteiro positivo e teste para saber se ele é primo ou não. Faça um script que recebe um inteiro n e mostra todos os primos, de 1 até n.
  7. Um número é dito perfeito quando ele é igual a soma de seus fatores. Por exemplo, os fatores de 6 são 1, 2 e 3 (ou seja, podemos dividir 6 por 1, por 2 e por 3) e 6=1+2+3, logo 6 é um número perfeito. Escreva uma função que recebe um inteiro e dizer se é perfeito ou não. Em outra função, peça um inteiro n e mostre todos os números perfeitos até n.
    Números perfeitos em PHP
  8. Faça um programa para imprimir:
    •     1
          2   2
          3   3   3
          .....
          n   n   n   n   n   n  ... n
      para um n informado pelo usuário. Use uma função que receba um valor n inteiro e imprima até a n-ésima linha
    • Código na apostila

  9. Faça um programa para imprimir:
    •     1
          1   2
          1   2   3
          .....
          1   2   3   ...  n
      para um n informado pelo usuário. Use uma função que receba um valor n inteiro imprima até a n-ésima linha.
  10. Faça um programa, com uma função que necessite de um argumento. A função retorna o valor de caractere ‘P’, se seu argumento for positivo, e ‘N’, se seu argumento for zero ou negativo.
  11. Faça um programa com uma função chamada somaImposto. A função possui dois parâmetros formais: taxaImposto, que é a quantia de imposto sobre vendas expressa em porcentagem e custo, que é o custo de um item antes do imposto. A função “altera” o valor de custo para incluir o imposto sobre vendas.

  12. Faça um programa que converta da notação de 24 horas para a notação de 12 horas. Por exemplo, o programa deve converter 14:25 em 2:25 P.M. A entrada é dada em dois inteiros. Deve haver pelo menos duas funções: uma para fazer a conversão e uma para a saída. Registre a informação A.M./P.M. como um valor ‘A’ para A.M. e ‘P’ para P.M. Assim, a função para efetuar as conversões terá um parâmetro formal para registrar se é A.M. ou P.M. Inclua um loop que permita que o usuário repita esse cálculo para novos valores de entrada todas as vezes que desejar.
  13. Faça uma função que informe a quantidade de dígitos de um determinado número inteiro informado.
    Quantos dígitos tem um número

Funções Recursivas - Recursividade em PHP

"Para entender recursividade, tem que saber recursividade".
Ao final deste tutorial de nossa apostila de PHP, vamos entender essa piadinha interna entre programadores.

Recomendo: Apostila de PHP para download

Função Recursiva

Uma função recursiva é nada mais nada menos que uma função que invoca...ela mesma.
Sim, isso mesmo, é uma função que chama ela mesma.

Obviamente se for só o código da função chamando ela mesmo, essa de dentro também vai chamar ela mesma, que vai chamar de novo ela mesma...e você criou um vírus, que vai consumir toda memória ram do computador (você pode upar esse código para seu servidor web e pegar seus amigos).

Para isso, deve necessariamente haver uma condição em que as funções para de se invocar.
É simplesmente um IF e ELSE.

Se atingir determinado valor de argumento, para de se invocar.
Senão, continua se invocando.

Vamos ver como calcular um somatório, um fatorial e a sequência de Fibonacci usando apenas recursividade.

Somatório com Recursão

Seja F(n) uma função que representa o somatório de um número n, ou seja, é a soma:
F(n) = 1 + 2 + 3 + 4 + ...+ (n-1) + n

Por exemplo:
F(4) = 1 + 2 + 3 + 4 = 10
F(5) = 1 + 2 + 3 + 4 + 5 = 15
...
Porém, note uma coisa:
F(5) = (1 + 2 + 3 + 4) + 5 = F(4) + 5

Ou seja:
F(n) = n + F(n-1)

Então vai funcionar assim:
Vamos criar uma função de somatorio() que chega se o argumento for 1, se for, retorna 1 e acabou o programa.

Se não for 1, retorna n + somatorio(n-1);

Veja como fica o código:
<html>
 <head>
  <title>Apostila PHP Progressivo</title>
 </head>
 <body>
 <form action="" method="get">
  Somatório de: <input type="number" name="number" /><br />
  <input type="submit" name="submit" value="Calcular" />
 </form> 
 <?php
  $numero = $_GET['number'];
  echo "O somatório de $numero é : ".somatorio($numero);
  
  function somatorio($numero){
   if($numero==1)
    return 1;
   else
    return $numero + somatorio($numero-1);
  }
 ?>
 </body>
</html>

Fatorial com Recursão

Explicamos o que é e como calcular em:
Fatorial com laços em PHP

Veja que:
5! = 5 x 4 x 3 x 2 x 1
6! = 6 x 5 x 4 x 3 x 2 x 1 = 6 x 5!

Ou seja:
n! = n * (n-1)!

Por definição, 0!=1 e esse será nosso ponto de parada.
Nosso código fica:
<html>
 <head>
  <title>Apostila PHP Progressivo</title>
 </head>
 <body>
 <form action="" method="get">
  Fatorial de de: <input type="number" name="number" /><br />
  <input type="submit" name="submit" value="Calcular" />
 </form> 
 <?php
  $numero = $_GET['number'];
  echo "O fatorial de $numero é : ".fat($numero);
  
  function fat($numero){
   if($numero==0)
    return 1;
   else
    return $numero * fat($numero-1);
  }
 ?>
 </body>
</html>

Fibonacci com Recursão

Já falamos sobre isso em:
Sequência de Fibonacci com Laços

Faremos, por definição:
F(0) = 0;
F(1) = 1;

E a fórmula com recursividade é:
F(n) = F(n-1) + F(n-2);

O ponto de parada é quando n for 0 ou 1, veja como exibir a sequência de Fibonacci usando recursão:
<html>
 <head>
  <title>Apostila PHP Progressivo</title>
 </head>
 <body>
 <form action="" method="get">
  Fatorial de de: <input type="number" name="number" /><br />
  <input type="submit" name="submit" value="Calcular" />
 </form> 
 <?php
  $numero = $_GET['number'];
  echo "O termo $numero é: ".fibo($numero);
  
  function fibo($numero){
   if($numero==0 || $numero==1)
    return $numero;
   else
    return (fibo($numero-1) + fibo($numero-2));
  }
 ?>
 </body>
</html>

Funções invocando Função

Neste tutorial de nosso curso de PHP, vamos ver como é a técnica de uma função invocar outra função dentro dela.

Não deixe de ver: Apostila para download

Função invocando Função

Uma das técnicas mais comuns em funções é o ato de uma função invocar outra.
Isso mesmo, dentro de uma função, é normal você invocar outra.

Vamos fazer um script que pede o raio para um usuário e calcula sua área:
<html>
 <head>
  <title>Apostila PHP Progressivo</title>
 </head>
 <body>
 <form action="" method="get">
  Raio: <input type="number" name="ratio" /><br />
  <input type="submit" name="submit" value="Calcular" />
 </form> 
 <?php
  $raio = $_GET['ratio'];
  echo "A área é: ".area($raio);
  
  function area($raio){
   return pi()*pow($raio,2);
  }
 ?>
 </body>
</html>
Note que usamos duas funções
pi() - que retorna o valor matemático de PI
pow() - função de potenciação

Essa é uma técnica bem comum e vamos usar bastante, principalmente no tutorial seguinte, sobre funções recursivas.

Exemplo de função invocando função

Crie um script que receba os coeficientes de uma equação do segundo grau, e diga se ela existe ou não, se tem raízes reais distintas, raízes reais iguais ou raízes imaginárias.

Já fizemos um script que calcula as raízes de uma equação do segundo grau.

Aqui vamos usar duas funções:
equacao() - recebe os 3 coeficientes, a, b e c e diz a classificação dela. Para isso, usa a função seguinte
delta() - função que recebe os 3 coeficientes como argumento e retorna seu valor
<html>
 <head>
  <title>Apostila PHP Progressivo</title>
 </head>
 <body>
 <form action="" method="get">
  Coeficiente a: <input type="number" name="a" /><br />
  Coeficiente b: <input type="number" name="b" /><br />
  Coeficiente c: <input type="number" name="c" /><br />
  <input type="submit" name="submit" value="Calcular" />
 </form> 
 <?php
  $a = $_GET['a'];
  $b = $_GET['b'];
  $c = $_GET['c'];
  
  echo "A equação : ".equacao($a,$b,$c);
  
  function equacao($a,$b,$c){
   $delta=delta($a,$b,$c);
   
    if($a==0)
     return "não existe";
    elseif($delta==0)
     return "duas raízes reais iguais";
    elseif($delta>0)
     return "duas raízes reais distintas";
    else
     return "duas raízes imaginárias";
  }
  
  function delta($a,$b,$c){
   return ($b*$b - 4*$a*$c);
  }
 ?>
 </body>
</html>
Na echo, invocamos a equacao().

A primeira coisa que esta variável faz é calcular o valor de $delta, usando a função delta().
Depois, faz os testes necessários para saber se a equação existe e como são suas raízes.

Note que a função delta() vem até depois da função equacao(), pois quando você invoca uma função o interpretador sai caçando no script, ou nas páginas extras que você adicionou.

Você pode inclusive invocar várias vezes a delta.
Veja como fica agora sem usar a variável $delta, e sim usando a função delta() dentro dos testes condicionais:
 <?php
  $a = $_GET['a'];
  $b = $_GET['b'];
  $c = $_GET['c'];
  
  echo "A equação : ".equacao($a,$b,$c);
  
  function equacao($a,$b,$c){
   
    if($a==0)
     return "não existe";
    elseif(delta($a,$b,$c)==0)
     return "duas raízes reais iguais";
    elseif(delta($a,$b,$c)>0)
     return "duas raízes reais distintas";
    else
     return "duas raízes imaginárias";
  }
  
  function delta($a,$b,$c){
   return ($b*$b - 4*$a*$c);
  }
 ?>

Incluindo Arquivos Externos de PHP: include, include_once e require_once

Neste tutorial de curso de PHP, vamos aprender como incluir outros arquivos PHP em nosso script, usando a declaração include, include_once e requirce_once.

Recomendamos: Estudar pela apostila de PHP

Incluir arquivos: include

Fizemos alguns scripts com uma ou duas funções, em nossos tutoriais passados.

Quando você for montar seu sistema web ou criar um jogo, por exemplo, vai facilmente criar dezenas ou centenas de funções.

Imagine só amontoar todas essas funções num bloco <?php ?> ?
Tudo num arquivo .php?
Não dá! Ia ficar muito desorganizado.

Existe então a possibilidade de colocar todas funções em um arquivo separado.
Por exemplo, crie um arquivo chamado "matematica.php"

E insira nele as seguintes funções:
<?php
 function soma($a, $b)
 {
  return $a + $b;
 }

 function sub($a, $b)
 {
  return $a - $b;
 }

 function multiplicacao($a, $b)
 {
  return $a * $b;
 }

 function divisao($a, $b)
 {
  return $a / $b;
 }
?>
Agora na sua home.php faça:
<html>
 <head>
  <title>Apostila PHP Progressivo</title>
 </head>
 <body>
 <form action="" method="get">
  Numero 1: <input type="number" name="num1" /><br />
  Numero 2: <input type="number" name="num2" /><br />
  <input type="submit" name="submit" value="Calcular" />
 </form> 
 <?php
  include "matematica.php";
  $a = $_GET['num1'];
  $b = $_GET['num2'];
  
  echo "Soma: ".soma($a,$b)."<br />";
  echo "Subtracação: ".sub($a,$b)."<br />";
  echo "Multiplicação: ".multiplicacao($a,$b)."<br />";
  echo "Divisao: ".divisao($a,$b)."<br />";
 ?>
 </body>
</html>
E veja o resultado! Aparece a soma, subtração, multiplicação e divisão!
Veja como nosso código ficou mais organizado.

Imagine agora que você vai criar um jogo.
Talvez as funções de cenários fiquem melhor no "cenario.php"
Os sons do game devem ficar em "sons.php"
As características dos personagens em "personagens.php"

Isso se o arquivo estiver no mesmo diretório de 'home.php'
Se tiver na pasta 'level2112', você deve dar: include "level2112/level.php"

Você pode incluir inclusive arquivos PHP externos de outros sites.

Include, include_onde e require_once

Imagine que tenhamos o arquivo A.php e nele damos include no B.php e no C.php
No B.php damos include no C.php

Note que aí teríamos um problema: o C.php foi incluído duas vezes.
Na primeira quando incluímos o B.php (que já inclui o C) e quando o B novamente inclui o C.php

Isso vai gerar uma série de erros, pois vão existir variáveis e funções duplicadas.
Para evitar isso, ao invés de include, use:
include_once

Assim, se tentar incluir um arquivo que já foi incluso, ele será sumariamente desconsiderado.

Mas ainda assim temos um problema.
include e include_once apenas tentam incluir um arquivo, se não conseguem, bola pra frente, o script segue e você pode ter diversos erros achando que incluiu um arquivo quando não foi incluso.

Se for absolutamente imprescindível (geralmente é), não inclusa e sim requeira.
Use: require_once

Para não ter dúvidas, use sempre require_once.

Variáveis de Escopo Global: global e $GLOBALS

Neste tutorial de nossa apostila de PHP, vamos aprender a usar e criar variáveis de escopo global em nossos scripts PHP.

Aconselhamos: Apostila de PHP Completa para download

Variáveis Globais

Em nosso tutorial anterior, quando falamos em escopo de uma função, dissemos que elas são escopos fechados, que não tem noção de nada de fora nem atrapalham nada fora do seu contexto, endo possível elas obterem informações via parâmetros e dar saídas via return.

Porém existe uma outra maneira de funções verem algo do mundo externo, que é através de variáveis globais.

Para usar uma variável como ela se fosse global, por exemplo $a anteriormente declarada, fazemos:
global $a

Essa técnica tem de diferente o fato de ser possível acessar essa variável de qualquer lugar dentro do script, mesmo dentro de funções, sem que as funções recebam elas como argumento.

Imagine que você quer dar um desconto de 10% em sua loja, simplesmente faça;
$desconto = 0.10;

Depois, sempre que quiser usar essa variável, faça:
global $desconto;
E saia sando normalmente, nativamente o PHP vai entender que está falando daquela variável $desconto que usou no começo do script.

E prontinho, não precisa mais sair definindo variáveis de descontos em milhares de páginas, faça apenas uma declaração, use a palavra-chave global e use esse valor onde quiser, sem precisar declarar nunca mais.

Exemplo de uso de Variável Global

Crie um script que pede um radio de uma circunferência ao usuário.
Através de uma função, exiba o valor do comprimento da circunferência e através de outra, exiba a área. Uso o valor de pi como 3.14

Nesse caso, nossa variável global vai ser o valor de pi
$pi=3.14;

Agora, sempre que quisermos usar a variável global (e não uma outra, como uma local de uma função de mesmo nome, fazemos):
$global $pi;

Pronto, agora podemos usar essa variável nas funções comprimento() e area().
Veja como ficou nosso código:
<html>
 <head>
  <title>Apostila PHP Progressivo</title>
 </head>
 <body>
 <form action="" method="get">
  Raio: <input type="number" name="ratio" /><br />
  <input type="submit" name="submit" value="testar" />
 </form> 
 <?php
  $pi = 3.14;
  $raio = $_GET['ratio'];
  
  echo "Comprimento: ".comprimento($raio)."<br/>";
  echo "Area: ".area($raio)."<br/>";
   
  function comprimento($raio){
   global $pi;
   return (2*$pi*$raio);
  }
  
  function area($raio){
   global $pi;
   return ($pi*$raio*$raio);
  }
 ?>
 </body>
</html>

Variável global com $GLOBALS

A palavra global é como se tivesse o poder de transformar qualquer variável em global, o que pode ser arriscado, por isso use sempre com cautela e muita calma, você pode ter acesso ou  dar acesso para hackers.

O mesmo podemos fazer usando um array (vamos estudar isso em breve), o $GLOBALS, que tem uma lista de todas variáveis do escopo global do script.

Se tem uma variável de nome $nome, acessamos ela globalmente através de:
$GLOBALS['nome']

Veja o script com uso de  $GLOBALS
<html>
 <head>
  <title>Apostila PHP Progressivo</title>
 </head>
 <body>
 <form action="" method="get">
  Raio: <input type="number" name="ratio" /><br />
  <input type="submit" name="submit" value="testar" />
 </form> 
 <?php
  $pi = 3.14;
  $raio = $_GET['ratio'];
  
  echo "Comprimento: ".comprimento($raio)."<br/>";
  echo "Area: ".area($raio)."<br/>";
   
  function comprimento($raio){
   return (2*$GLOBALS['pi']*$raio);
  }
  
  function area($raio){
   return ($GLOBALS['pi']*$raio*$raio);
  }
 ?>
 </body>
</html>
Mais fonte de estudo:
http://php.net/manual/pt_BR/language.variables.scope.php
http://php.net/manual/pt_BR/reserved.variables.globals.php