Curso de PHP: #15 - Funções para manipulação de Strings

Curso de PHP: #15 - Funções para manipulação de Strings

E ai escoteiro, o que está achando de tudo que viu até agora? Deixe sua opinião ai nos comentários para eu saber o que eu preciso melhorar.

Em nosso post anterior nós tivemos a oportunidade de conhecer as funções que em minha opinião é o assunto mais importante da programação, pois é a base de vários outros. Agora que você já tem conhecimento sobre o tema, vamos conhecer algumas funções nativas do PHP muito úteis para manipulação de strings. Tenho certeza que você vai adorar.

Na documentação do PHP você pode conhecer todas as Funções de String do PHP, mas vou apresentar aqui as que eu acho mais interessantes e como elas funcionam.

str_replace

Imagine que você tem a seguinte frase: "Chiquinho é um menino nota 10. Dê os meus parabéns a Chiquinho!", porém você não pode ser tão informal, e precisa reescrever a frase substituindo Chiquinho por Francisco. A função str_replace faz isso e é bem simples.

<?php

$frase = "Chiquinho é um menino nota 10. Dê os meus parabéns a Chiquinho!";
$procurarPor = "Chiquinho";
$substituirPor = "Francisco";

echo str_replace($procurarPor, $substituirPor, $frase);

O resultado será

Francisco é um menino nota 10. Dê os meus parabéns a Francisco!

stripos

Imagine que você tem a seguinte frase: "Os melhores alunos da escola esse ano foram: José, Maria, Débora, Bianca, Cláudio e Cleiton.", e você precisa se certificar se a "Maria" está contida nessa frase.

<?php

$frase = "Os melhores alunos da escola esse ano foram: José, Maria, Débora, Bianca, Cláudio e Cleiton.";

$procurarPor = "Maria";

if (stripos($frase, $procurarPor)) {
    echo "Parabéns Maria!";
} else {
    echo "Você não se saiu muito bem, Maria!";
}

A função stripos encontra a posição daquela string que você está procurando, dentro de outra string. Se ela encontra ela retornará um inteiro informando a posição

Exemplo:

<?php

$frase = "Acampamento Dev é legal!";

// Retornará 1, porque a primeira posição é 0 e c é o segundo caractere
var_dump(stripos($frase, "c"));

// Retornará false, porque não encontrou z na string.
var_dump(stripos($frase, "z"));

Ué, mas se ele retorna um inteiro, como conseguimos usar essa função em um IF, se a gente aprendeu que no IF temos que passar Booleano?

O PHP tem um jeito "mágico" de tratar os tipos em situações específicas. Se eu estou numa situação que preciso avaliar uma expressão Booleana, o PHP usará a seguinte regra:

  1. 0 é considerado false
  2. "" (string vazia) é considerado false
  3. "0" (string contendo um número 0) é considerado false
  4. [] (Array vazio) é considerado false
  5. [0] (Array contendo apenas o número 0) é considerado true
  6. [""] (Array contendo apenas uma string vazia) é considerado true
  7. "Acampamento Dev" (String preenchida) é considerado true
  8. 1 (Um número diferente de zero) é considerado true
  9. -1 (Um número negativo) é considerado true

str_contains

Ela funciona muito parecida com a stripos, porém ela não procura a posição ela apenas analisa se a substring existe ou não, e sempre retornará um Booleano.

Essa função é nova e foi inserida no PHP 8, ou seja, se quando você estiver lendo esse Post o seu ambiente não estiver rodando o PHP 8 e você tentar executar essa função encontrará um erro.

strtoupper

Essa função também é muito utilizada e é muito útil, ela recebe uma string e devolve a versão em letras maiúsculas dessa mesma string.

<?php

$frase = "Acampamento Dev é legal!";

echo strtoupper($frase);

O resultado será

ACAMPAMENTO DEV é LEGAL!

Ué, porque será que o "é" ficou minúsculo?

Sempre que estivermos trabalhando com acentuação devemos utilizar as versão com o prefixo mb_ das funções. Lembra?

<?php

$frase = "Acampamento Dev é legal!";

echo mb_strtoupper($frase);

O resultado será

ACAMPAMENTO DEV É LEGAL!

strtolower

Essa função também é muito utilizada e é muito útil, ela recebe uma string e devolve a versão em letras maiúsculas dessa mesma string.

<?php

$frase = "ACAMPAMENTO DEV É LEGAL!";

echo strtolower($frase);

O resultado será

acampamento dev É legal!

Nesse caso seria melhor utilizar a variação dessa função que usar o prefixo mb_.

<?php

$frase = "ACAMPAMENTO DEV É LEGAL!";

echo mb_strtolower($frase);

O resultado será

acampamento dev é legal!

ucfirst

Essa função recebe uma string como parâmetro e devolve a mesma string com a inicial em maiúscula.

<?php

$frase = "acampamento dev";

echo ucfirst($frase);

O resultado será

Acampamento dev

explode

Como o próprio nome sugere, ela "explode" uma string em vário pequenos pedaço, onde cada pequeno pedaço é uma parte dessa string principal, e todos esses pequenos pedaços são devolvidos como itens de um Array.

Pareceu confuso? Veja esse exemplo que ficará claro

<?php

$pessoas = "Ivan, Sérgio, Jéssica, Beatriz, Lara";

$listaDePessoas = explode(", ", $pessoas);

print_r($listaDePessoas);

O resultado será

Array
(
    [0] => Ivan
    [1] => Sérgio
    [2] => Jéssica
    [3] => Beatriz
    [4] => Lara
)

Como primeiro parâmetro passamos o delimitador, ou seja, a parte da string que separam as palavras (Que nesse caso foi uma virgula seguida de um espaço em branco), e como segundo parâmetro passamos a string que será "explodida".

Implode

Essa função faz exatamente o contrário da função "explode", ou seja, ela pega um Array e converte em uma string onde cada item será separado pelo delimitador informado.

Veja o exemplo:

<?php

$listaDeAprovados = ["Carlos", "Vanessa", "Aline"];

$aprovados = implode(", ", $listaDeAprovados);

echo "Os aprovados foram: $aprovados";

O resultado será

Os aprovados foram: Carlos, Vanessa, Aline

trim

Muitas vezes recebemos dados do usuário, como vimos quando utilizamos a função readline, porém não temos controle do que o usuário vai digitar. Ele pode digitar o nome dele como "Paulo", " Paulo" (com um espaço em branco na frente), "Paulo " (com um espaço em branco no final, etc.

A função trim serve justamente para remover espaços em branco no início e no final de uma string.

Exemplo:

<?php

$nome1 = " Paulo";

if ($nome1 == "Paulo") {
    echo "Essa linha nunca será impressa!";
}

$nome2 = trim(" Paulo");

if ($nome2 == "Paulo") {
    echo "Essa linha será impressa!";
}

Existem também as variantes ltrim que remove espaços em branco apenas no inicio da string e rtrim que remove espaços em branco apenas no final da string.

L e R nesse caso é abreviação de Left (esquerda) e Right (direita)

number_format

Essa função também é muito útil e serve para formatamos a exibição de números no PHP.

Como vimos, os números decimais são separados por "." e não por "," como fazemos aqui no Brasil. Com essa função podemos resolver isso. Veja esse exemplo:

<?php

$salario = 12000;
$bonus = 986.50;
$total = $salario + $bonus;

echo "R$ " . number_format($total, 2, ",", ".");

O resultado será

R$ 12.986,50
  • O primeiro parâmetro é o número que querendo formatar
  • O segundo parâmetro é a quantidade de casas decimais que queremos exibir
  • O terceiro parâmetro é a string que queremos utilizar como separador das casas decimais
  • O quarto parâmetro é a string que queremos utilizar como separador do milhar

Existem várias outras funções interessantes para manipulação de Strings no PHP, então vale muito a pena dar uma olhada na documentação, mas para esse Post não ficar muito extenso vão parar por aqui.

E ai, curtiu? Então vamos de desafio.

Desafio

Utilize o código abaixo e implemente a função para que receba como parâmetro um $funcionario (Array associativo contendo nome e salário) e um $percentualDeAumento.

A função deve calcular o novo salário com base no percentual informado e retornar a frase com o CORINGAS substituidos.

<?php

function avisarFuncionarioSobreAumento($funcionario, $percentualDeAumento) {
    $frase = "Parabéns #NOME_FUNCIONARIO#, seu salário passou de #SALARIO_ANTIGO para #NOVO_SALARIO#!";
}

$funcionario = [
    "nome" => "José Felipe da Silva",
    "salario" => 7850
];

$percentualDeAumento = 12;

echo avisarFuncionarioSobreAumento($funcionario, $percentualDeAumento);

A saída ao executar o programa deve ser:

Parabéns José Felipe da Silva, seu salário passou de R$ 7.850,00 para R$ 8.792,00!

Essa é um pouquinho mais difícil mas você consegue, tenho certeza disso!!!

Até a próxima, escoteiro!!!