PHP Funções de String
Quase todo programa mexe com texto: um nome digitado num formulário, um e-mail, uma linha de um arquivo. O PHP traz prontas dezenas de funções para medir, procurar, trocar, cortar e arrumar textos. Nesta aula você conhece as mais usadas, uma de cada vez, sempre com a saída real do PHP.
- O que é uma função e como "chamar" uma: nome, parênteses, argumentos e o valor que ela devolve.
- Medir (
strlen,str_word_count), inverter (strrev) e procurar (strpos,str_contains,str_starts_with,str_ends_with). - A armadilha mais clássica do PHP:
strposdevolvendo0dentro de umif. - Trocar (
str_replace), cortar (substr), mudar maiúsculas (ucfirst,ucwords,strtoupper,strtolower) e limpar espaços (trim). - Quebrar e juntar (
explode,implode), completar e repetir (str_pad,str_repeat), quebrar linhas (wordwrap,nl2br).
Você já sabe o que é uma string (um texto entre aspas) e como juntar textos com o ponto (veja Operadores de String). Agora vamos trabalhar com esses textos. Os exemplos rodam com php arquivo.php no terminal da Ana (veja PHP na Linha de Comando) e você pode repetir todos no editor do guia.
Antes: o que é "chamar uma função"
Pense numa máquina de suco: você coloca laranjas (a entrada), aperta o botão e sai suco (o resultado). Você não precisa saber como a máquina funciona por dentro. Uma função do PHP é igual: você entrega um valor, ela faz um trabalho e devolve um resultado.
<?php $nome = "Ana Souza"; echo strlen($nome), "\n";
- strlen
- O nome da função. Vem de string length, "comprimento do texto".
- ( )
- Os parênteses dizem "execute a função agora". Sem eles, não é uma chamada.
- $nome
- O argumento: o valor que você entrega para a função trabalhar. Algumas funções recebem vários, separados por vírgula.
- echo …
- A função devolve um valor (aqui, o número
9), e oechomostra esse valor na tela. Você também pode guardá-lo numa variável:$tamanho = strlen($nome);. - , "\n"
- O
echoaceita vários valores separados por vírgula. O"\n"é uma quebra de linha, para o prompt do terminal não grudar no resultado (veja echo e print).
$ php tamanho.php 9
Ana Souza tem 9 caracteres: 3 do "Ana", 1 espaço e 5 do "Souza". O espaço conta.
Quase todas as funções de string devolvem um texto novo e deixam o original como estava. Se você quer guardar o resultado, atribua: $nome = strtoupper($nome);. Você vai ver esse erro acontecer na seção do str_replace.
Medir e inverter
strlen: quantos caracteres?
<?php
$nome = "Ana Souza";
echo strlen($nome), "\n";
echo strlen(""), "\n";
echo strlen(" oi "), "\n";
$ php medir.php 9 0 « texto vazio: zero 6 « os 4 espaços contam
Como no exemplo anterior, o "\n" depois de cada resultado só pula a linha.
strlen conta bytes, não letras
Para o PHP, strlen("maçã") é 6, não 4: cada letra acentuada ocupa 2 "pedacinhos" (bytes). Com texto em português isso faz diferença. A solução, mb_strlen, está na próxima aula: Acentos e mbstring.
str_word_count: quantas palavras?
<?php
echo str_word_count("Bom dia turma"), "\n";
echo str_word_count("Bom dia, turma!"), "\n";
echo str_word_count("Olá, você está aí?"), "\n";
print_r(str_word_count("Olá, você está aí?", 1));
$ php palavras.php
3
3 « vírgula e exclamação não atrapalham
4 « parece certo... mas veja as palavras que ele achou:
Array
(
[0] => Ol
[1] => voc
[2] => est
[3] => a
)
Com o segundo argumento 1, a função devolve a lista de palavras (um array, que o print_r mostra; veja var_dump e print_r). E a lista revela o problema: str_word_count só entende letras sem acento. O á de "Olá" foi tratado como separador, e "aí" virou só "a". O total deu 4 por sorte. Para português, prefira contar com explode (mais abaixo) ou com as técnicas da aula de mbstring.
strrev: texto ao contrário
<?php
echo strrev("Ana Souza"), "\n";
echo strrev("roma"), "\n";
$ php inverter.php azuoS anA amor
O nome vem de string reverse, "inverter o texto". Serve para brincadeiras (palíndromos: palavras que se leem igual de trás para frente). Assim como o strlen, ele não se dá bem com acentos: strrev("maçã") vira lixo, e a aula de mbstring mostra por quê.
Procurar dentro do texto
strpos: em que posição está?
strpos (de string position) procura um pedaço de texto dentro de outro e devolve a posição onde ele começa. A contagem começa do zero: o primeiro caractere é a posição 0, o segundo é a 1, e assim por diante.
| Posição | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | … |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Caractere | b | a | n | a | n | a | (espaço) | c | o | m | … |
<?php $frase = "banana com canela"; var_dump(strpos($frase, "na")); var_dump(strpos($frase, "com")); var_dump(strpos($frase, "Com")); var_dump(stripos($frase, "Com")); var_dump(strrpos($frase, "na")); var_dump(strpos($frase, "na", 3)); var_dump(strpos($frase, "uva"));
- strpos($frase, "na")
- Primeiro argumento: onde procurar (o "palheiro"). Segundo: o que procurar (a "agulha").
- var_dump(…)
- Mostra o valor e o tipo. Usamos
var_dumpe nãoechoporque oechonão mostrafalse(ele vira texto vazio).
$ php procurar.php int(2) « o primeiro "na" de "banana" começa na posição 2 int(7) bool(false) « "Com" com C maiúsculo não existe: strpos diferencia maiúsculas int(7) « stripos (i = ignora maiúsculas) acha int(4) « strrpos (r = right, da direita) acha o ÚLTIMO "na" de "banana" int(4) « o terceiro argumento manda começar a procurar da posição 3 bool(false) « não achou: devolve false
Repare nos dois tipos de resposta: um número (int) quando acha, ou false quando não acha. É daí que vem a armadilha.
A armadilha do 0 × false
A Ana quer saber se um e-mail tem "ana" dentro. Ela escreve o que parece óbvio:
<?php
$email = "ana@escola.com.br";
if (strpos($email, "ana")) {
echo "Achei 'ana'\n";
} else {
echo "Não achei 'ana'\n";
}
$ php armadilha.php Não achei 'ana' « mas "ana" está bem ali no começo!
O que aconteceu, passo a passo:
"ana"está no começo do e-mail, na posição0. Ostrposdevolveu0.- O
ifprecisa de verdadeiro ou falso. Ele converte o0em booleano, e0virafalse(veja Booleanos). - O PHP foi para o
else. Sem erro, sem aviso: só a resposta errada.
A correção é comparar com false, usando !== ("diferente e de tipo diferente"; veja Comparação (== e ===)). Assim, 0 (um int) não é confundido com false (um bool):
<?php
$email = "ana@escola.com.br";
if (strpos($email, "ana") !== false) {
echo "Achei 'ana'\n";
} else {
echo "Não achei 'ana'\n";
}
$ php armadilha-certa.php Achei 'ana'
strpos
Nunca escreva if (strpos(…)). Escreva if (strpos(…) !== false). Ou, melhor ainda, se você só quer saber "tem ou não tem", use str_contains, que devolve true/false e acaba com o problema.
str_contains, str_starts_with, str_ends_with PHP 8.0+
Essas três funções respondem só "sim" ou "não". Os nomes já dizem tudo: "o texto contém…?", "começa com…?", "termina com…?".
<?php
$email = "ana@escola.com.br";
var_dump(str_contains($email, "@"));
var_dump(str_contains($email, "ANA"));
var_dump(str_contains($email, ""));
var_dump(str_starts_with($email, "ana"));
var_dump(str_ends_with($email, ".br"));
var_dump(str_ends_with("foto.JPG", ".jpg"));
$ php contem.php bool(true) bool(false) « diferencia maiúsculas: "ANA" não é "ana" bool(true) « curiosidade: todo texto "contém" o texto vazio bool(true) bool(true) bool(false) « ".JPG" não é ".jpg"
Como elas já devolvem true ou false, o if fica natural: if (str_contains($email, "@")). Para ignorar maiúsculas, converta antes: str_ends_with(strtolower($arquivo), ".jpg").
Em sistemas antigos (PHP 7), essas funções não existem e dão Call to undefined function str_contains(). O equivalente é strpos($texto, $parte) !== false (contém) e strpos($texto, $parte) === 0 (começa com). Você vai ver muito isso em códigos antigos.
Missão: complete o programa para mostrar E-mail válido se o e-mail tiver @ e E-mail inválido se não tiver. Use str_contains. Depois troque o e-mail por "ana.escola.com.br" e veja a outra mensagem.
<?php
$email = "ana@escola.com.br";
if (false) { // troque o false por str_contains(...)
echo "...";
} else {
echo "...";
}
<?php
$email = "ana@escola.com.br";
if (str_contains($email, "@")) {
echo "E-mail válido";
} else {
echo "E-mail inválido";
}
Trocar: str_replace
str_replace ("substituir no texto") troca todas as ocorrências de um pedaço por outro. A ordem dos argumentos é: o que procurar, pelo que trocar, em qual texto.
<?php
echo str_replace("mundo", "Ana", "Olá, mundo!"), "\n";
echo str_replace("a", "4", "banana"), "\n";
echo str_replace("Banana", "Maçã", "banana e Banana"), "\n";
echo str_ireplace("banana", "maçã", "banana e Banana"), "\n";
echo str_replace(["á", "ã", "ç"], ["a", "a", "c"], "maçã e pão"), "\n";
str_replace("a", "o", "banana", $quantas);
echo "Trocas: $quantas\n";
$ php trocar.php Olá, Ana! b4n4n4 « trocou TODOS os "a" banana e Maçã « só o "Banana" com B maiúsculo maçã e maçã « str_ireplace ignora maiúsculas maca e pao « listas: cada item da primeira troca pelo item da segunda Trocas: 3 « o 4º argumento recebe quantas trocas foram feitas
- ["á", "ã", "ç"]
- Uma lista (array) do que procurar. O PHP troca o primeiro item pelo primeiro item da outra lista, o segundo pelo segundo…
- $quantas
- O quarto argumento é opcional. Você passa uma variável e a função a preenche com o número de trocas.
Agora o erro mais comum com str_replace (e com todas as funções desta aula):
<?php
$frase = "Olá, mundo!";
str_replace("mundo", "Ana", $frase);
echo $frase, "\n";
$ php esqueci.php Olá, mundo! « nada mudou!
O str_replace criou o texto novo Olá, Ana!, mas ninguém o guardou: ele foi jogado fora. A variável $frase continua igual. O certo é $frase = str_replace("mundo", "Ana", $frase);.
Cortar: substr
substr (de substring, "pedaço do texto") recorta uma parte. Você diz de onde começa e, se quiser, quantos caracteres pegar. A contagem começa do zero, como no strpos. Números negativos contam a partir do fim.
<?php $nome = "Ana Souza"; echo substr($nome, 0, 3), "\n"; echo substr($nome, 4), "\n"; echo substr($nome, -5), "\n"; echo substr($nome, -5, 2), "\n"; echo substr($nome, 0, -6), "\n"; var_dump(substr($nome, 20)); echo $nome[0], "\n"; echo $nome[-1], "\n";
| Linha | O que faz | Saída |
|---|---|---|
substr($nome, 0, 3) | Começa na posição 0 e pega 3 caracteres | Ana |
substr($nome, 4) | Começa na posição 4 e vai até o fim | Souza |
substr($nome, -5) | Começa 5 caracteres antes do fim | Souza |
substr($nome, -5, 2) | 5 antes do fim, pega 2 | So |
substr($nome, 0, -6) | Do começo, deixando 6 de fora no fim | Ana |
substr($nome, 20) | Começa depois do fim do texto | "" (vazio, sem erro) |
$nome[0] | Um caractere só, pela posição (como num array) | A |
$nome[-1] | O último caractere | a |
$ php cortar.php Ana Souza Souza So Ana string(0) "" A a
Um uso clássico: pegar as iniciais. substr("Ana", 0, 1) . substr("Souza", 0, 1) dá AS. Com nomes como "Érica", porém, substr corta a letra no meio; para isso existe o mb_substr (veja mbstring).
Maiúsculas e minúsculas
<?php
echo ucfirst("ana souza"), "\n";
echo ucwords("ana souza da silva"), "\n";
echo lcfirst("Ana"), "\n";
echo strtoupper("ana souza"), "\n";
echo strtolower("ANA SOUZA"), "\n";
echo ucwords(strtolower("ANA SOUZA")), "\n";
echo ucwords("ana-maria souza", " -"), "\n";
$ php maiusculas.php Ana souza « ucfirst: só a primeira letra do texto Ana Souza Da Silva « ucwords: a primeira letra de cada palavra ana « lcfirst: primeira letra minúscula ANA SOUZA « strtoupper: tudo maiúsculo ana souza « strtolower: tudo minúsculo Ana Souza « funções encaixadas: primeiro minúsculo, depois capitaliza Ana-Maria Souza « o 2º argumento diz o que separa as palavras
| Função | Origem do nome |
|---|---|
ucfirst | upper case first: "primeira em maiúscula" |
ucwords | upper case words: "palavras com maiúscula" |
lcfirst | lower case first: "primeira em minúscula" |
strtoupper | string to upper: "texto para maiúsculas" |
strtolower | string to lower: "texto para minúsculas" |
Na linha ucwords(strtolower("ANA SOUZA")), uma função está dentro da outra. O PHP resolve de dentro para fora: primeiro strtolower devolve "ana souza", depois esse resultado entra no ucwords. Repare também que ucwords fez "Da Silva", com "Da" maiúsculo: ele não sabe que em português "da" fica minúsculo.
$ php -r 'echo ucfirst("érica"), " ", strtoupper("joão"), "\n";'
érica JOãO
Essas funções só mexem nas letras sem acento. "érica" continuou minúsculo e "joão" virou JOãO. A solução (mb_strtoupper, mb_convert_case) está em Acentos e mbstring.
Limpar espaços: trim
Quando alguém digita num formulário, é comum vir espaço sobrando no começo ou no fim (e às vezes um "Enter"). trim ("aparar") remove os espaços, tabs e quebras de linha das pontas. O meio fica intacto.
<?php
$digitado = " Ana Souza \n";
echo "[" . $digitado . "]\n";
echo "[" . trim($digitado) . "]\n";
echo "[" . ltrim($digitado) . "]\n";
echo "[" . rtrim($digitado) . "]\n";
echo "[" . trim("--Ana--", "-") . "]\n";
$ php aparar.php [ Ana Souza ] « o original: espaços e um \n no fim [Ana Souza] « trim: as duas pontas [Ana Souza ] « ltrim (left): só a esquerda [ Ana Souza] « rtrim (right): só a direita [Ana] « o 2º argumento diz QUAIS caracteres tirar
Os colchetes [ ] estão ali só para você ver onde o texto começa e termina. É um truque ótimo para depurar espaços invisíveis.
Missão: a Ana recebeu o nome " aNA sOUZA " de um formulário, todo bagunçado. Arrume para a tela mostrar exatamente [Ana Souza]: sem espaços nas pontas e com só as iniciais maiúsculas. Dica: combine trim, strtolower e ucwords.
<?php $digitado = " aNA sOUZA "; $nome = $digitado; echo "[" . $nome . "]";
<?php $digitado = " aNA sOUZA "; $nome = ucwords(strtolower(trim($digitado))); echo "[" . $nome . "]";
Quebrar e juntar: explode e implode
explode ("explodir") quebra um texto em pedaços, cortando num separador, e devolve uma lista (array). implode faz o contrário: junta uma lista num texto só, com um "cola" entre os itens.
<?php
$linha = "maçã,banana,uva";
$frutas = explode(",", $linha);
print_r($frutas);
echo $frutas[1], "\n";
echo implode(" - ", $frutas), "\n";
echo implode(", ", ["pão", "leite", "café"]), "\n";
- explode(",", $linha)
- Primeiro o separador, depois o texto. Corta em cada vírgula.
- $frutas[1]
- Pega o item da posição 1 da lista (a contagem começa do zero). Arrays são o assunto de Arrays Indexados.
- implode(" - ", $frutas)
- Primeiro a cola, depois a lista. Junta os itens com
-entre eles.
$ php quebrar.php
Array
(
[0] => maçã
[1] => banana
[2] => uva
)
banana
maçã - banana - uva
pão, leite, café
Três detalhes que pegam muita gente:
<?php
print_r(explode(",", "maçã, banana, uva"));
print_r(explode(",", "a,b,c,d", 2));
print_r(explode(";", "sem separador"));
$ php quebrar2.php
Array
(
[0] => maçã
[1] => banana « o espaço depois da vírgula veio junto!
[2] => uva
)
Array
(
[0] => a
[1] => b,c,d « o 3º argumento limita a 2 pedaços
)
Array
(
[0] => sem separador « sem o separador: uma lista com o texto inteiro
)
No primeiro caso, o separador era só a vírgula, então o espaço ficou nos pedaços. Use explode(", ", …) ou passe cada pedaço pelo trim (você vai aprender a fazer isso para cada item em foreach e Funções de Array).
Como str_word_count se perde com acentos, uma forma simples é quebrar nos espaços e contar os pedaços: count(explode(" ", "Olá, você está aí?")) dá 4. O count conta os itens de uma lista.
Completar e repetir: str_pad e str_repeat
str_pad ("acolchoar o texto") completa um texto até um tamanho, com o caractere que você escolher. É ótimo para números com zeros à esquerda e para alinhar colunas.
<?php
echo str_pad("7", 3, "0", STR_PAD_LEFT), "\n";
echo str_pad("Ana", 10, "."), "|\n";
echo str_pad("Ana", 10, ".", STR_PAD_LEFT), "|\n";
echo str_pad("Ana", 10, "*", STR_PAD_BOTH), "|\n";
echo str_pad("Ana Souza", 5, "."), "|\n";
echo str_repeat("-", 20), "\n";
echo str_repeat("ha", 3), "\n";
- "7"
- O texto original.
- 3
- O tamanho final desejado.
- "0"
- Com o que completar (se você não disser, é um espaço).
- STR_PAD_LEFT
- De que lado completar:
STR_PAD_RIGHT(direita, o padrão),STR_PAD_LEFT(esquerda) ouSTR_PAD_BOTH(os dois). São constantes do PHP.
$ php completar.php 007 Ana.......| .......Ana| ***Ana****| « nos dois lados; quando sobra um, vai para a direita Ana Souza| « já era maior que 5: nada muda (str_pad nunca corta) -------------------- hahaha
str_repeat ("repetir o texto") só repete um texto N vezes. É o jeito mais fácil de desenhar linhas e separadores na saída.
Quebrar linhas: wordwrap e nl2br
wordwrap: cabe na largura
wordwrap ("quebra de palavras") insere quebras para que nenhuma linha passe de uma largura, sem cortar palavras no meio.
<?php $aviso = "Amanhã não haverá aula por causa da reunião de professores."; echo wordwrap($aviso, 20, "\n"), "\n";
$ php quebra-linha.php Amanhã não haverá aula por causa da reunião de professores.
Argumentos: o texto, a largura máxima (20) e o que colocar na quebra ("\n"; numa página web, poderia ser "<br>"). Um quarto argumento true força o corte de palavras maiores que a largura, mas com acentos ele pode partir uma letra ao meio (veja mbstring).
nl2br: quebras de linha no HTML
No navegador, um \n dentro do HTML não pula linha: o navegador junta tudo. nl2br (new line to br, "quebra de linha para <br>") coloca um <br /> antes de cada quebra. É o que você usa para mostrar um texto digitado num <textarea>.
<?php
echo nl2br("Linha 1\nLinha 2"), "\n";
$ php nl2br.php Linha 1<br /> Linha 2
No terminal você vê a tag <br />; no navegador, ela vira a quebra de linha. Quando o texto vem do usuário, a ordem certa é primeiro escapar, depois quebrar: nl2br(htmlspecialchars($texto)). O porquê está em Escapar a Saída (XSS).
Experimente: rode e veja, na aba Resultado, a diferença entre o texto com e sem nl2br. Depois olhe a aba Código-fonte HTML.
<?php $recado = "Ana,\nnão esqueça a reunião.\nAbraço!"; ?> <h3>Sem nl2br</h3> <p><?= htmlspecialchars($recado) ?></p> <h3>Com nl2br</h3> <p><?= nl2br(htmlspecialchars($recado)) ?></p>
Quando dá errado
if com strpos diz "não achei", mas o texto está lá
$ php armadilha.php Não achei 'ana'
O que aconteceu: o texto procurado estava na posição 0, e o if tratou o 0 como falso. Não aparece nenhuma mensagem de erro, por isso é tão traiçoeiro.
Como consertar: if (strpos($texto, $parte) !== false) ou, no PHP 8, if (str_contains($texto, $parte)). Veja a armadilha.
$ php erro-nome.php
Fatal error: Uncaught Error: Call to undefined function strlenght() in /home/ana/php/erro-nome.php:2
Stack trace:
#0 {main}
thrown in /home/ana/php/erro-nome.php on line 2
O que significa: "chamada a uma função que não existe". A Ana escreveu strlenght (como em inglês, length), mas a função é strlen. O :2 e o on line 2 mostram a linha. Fatal error quer dizer que o programa parou ali (veja Lendo Erros do PHP).
Como consertar: confira o nome na tabela abaixo ou na referência de funções de string. Nomes do PHP são abreviados e nem sempre seguem um padrão (strlen, mas str_replace com _).
<?php echo strlen(null), "\n"; echo "fim\n";
$ php nulo.php Deprecated: strlen(): Passing null to parameter #1 ($string) of type string is deprecated in /home/ana/php/nulo.php on line 2 0 fim
O que significa: "passar null para o parâmetro nº 1, do tipo string, está obsoleto". O programa continua (a resposta foi 0), mas o PHP avisa que isso vai virar erro numa versão futura. Na prática, acontece quando uma variável que você esperava ter texto está vazia, como um campo de formulário que não veio (veja null).
Como consertar: garanta que o valor é um texto antes: strlen($nome ?? "") (o ?? está em ?? e ?->).
<?php $frutas = ["maçã", "uva"]; echo strlen($frutas);
$ php lista.php
Fatal error: Uncaught TypeError: strlen(): Argument #1 ($string) must be of type string, array given in /home/ana/php/lista.php:3
Stack trace:
#0 {main}
thrown in /home/ana/php/lista.php on line 3
O que significa: "o argumento nº 1 precisa ser do tipo string, mas foi dado um array". Funções de string trabalham com um texto; uma lista é outra coisa.
Como consertar: para saber quantos itens a lista tem, use count($frutas). Para medir um item, strlen($frutas[0]).
$ php -r 'print_r(explode("", "Ana"));'
Fatal error: Uncaught ValueError: explode(): Argument #1 ($separator) must not be empty in Command line code:1
Stack trace:
#0 Command line code(1): explode('', 'Ana')
#1 {main}
thrown in Command line code on line 1
O que significa: o separador do explode não pode ser vazio. A Ana queria quebrar o nome em letras.
Como consertar: para separar letra por letra, use str_split("Ana") (ou mb_str_split com acentos, em mbstring).
Tabela das funções desta aula
A lista completa, com todas as opções, está na Referência: Funções de String.
| Função | O que faz | Exemplo → resultado |
|---|---|---|
strlen($s) | Tamanho em bytes | strlen("Ana") → 3 |
str_word_count($s) | Conta palavras (sem acentos!) | str_word_count("Bom dia") → 2 |
strrev($s) | Inverte | strrev("roma") → amor |
strpos($s, $p) | Posição da 1ª ocorrência, ou false | strpos("banana", "na") → 2 |
stripos / strrpos | Igual, ignorando maiúsculas / a última | strrpos("banana", "na") → 4 |
str_contains($s, $p) 8.0+ | Contém? | str_contains("ana@x", "@") → true |
str_starts_with 8.0+ | Começa com? | str_starts_with("Ana", "A") → true |
str_ends_with 8.0+ | Termina com? | str_ends_with("a.pdf", ".pdf") → true |
str_replace($de, $para, $s) | Troca todas as ocorrências | str_replace("a", "4", "banana") → b4n4n4 |
str_ireplace | Igual, ignorando maiúsculas | |
substr($s, $ini, $qtd) | Recorta um pedaço | substr("Ana Souza", 4) → Souza |
substr_count($s, $p) | Quantas vezes aparece | substr_count("banana", "a") → 3 |
ucfirst / lcfirst | 1ª letra maiúscula / minúscula | ucfirst("ana") → Ana |
ucwords($s) | 1ª letra de cada palavra | ucwords("ana souza") → Ana Souza |
strtoupper / strtolower | Tudo maiúsculo / minúsculo | strtoupper("ana") → ANA |
trim / ltrim / rtrim | Tira espaços das pontas | trim(" Ana ") → Ana |
explode($sep, $s) | Quebra em lista | explode(",", "a,b") → ["a", "b"] |
implode($cola, $lista) | Junta a lista num texto | implode("-", ["a", "b"]) → a-b |
str_split($s) | Quebra em pedaços de 1 byte | str_split("oi") → ["o", "i"] |
str_pad($s, $tam, $com, $lado) | Completa até um tamanho | str_pad("7", 3, "0", STR_PAD_LEFT) → 007 |
str_repeat($s, $n) | Repete | str_repeat("-", 5) → ----- |
wordwrap($s, $larg, $quebra) | Quebra linhas numa largura | |
nl2br($s) | Põe <br /> antes das quebras | nl2br("a\nb") → a<br />↵b |
mb_
strlen, strrev, substr, strtoupper, ucfirst, str_pad, str_split e wordwrap contam bytes. Com "ç", "ã", "é", os resultados saem errados. A próxima aula, Acentos e mbstring, mostra o porquê e as funções certas.
Exercícios
1. Tamanho
Complete para mostrar quantos caracteres tem $senha:
2. Contém, do jeito seguro
Complete o if para funcionar mesmo quando "ana" estiver na posição 0 (sem usar str_contains):
3. Os 3 primeiros
Complete para pegar os 3 primeiros caracteres de $cpf:
4. Zeros à esquerda
Complete para o número da matrícula "42" virar "00042":
5. O que mostra $s = "Olá"; strtoupper($s); echo $s;?
6. Qual o resultado de strpos("Ana Souza", "Ana")?
7. Qual função transforma "pão;leite;café" numa lista de 3 itens?
Missão final: a Ana leu de um arquivo a linha "maçã,banana,uva". Faça o programa mostrar, em duas linhas:maçã | banana | uva3 frutas
Use explode para quebrar, implode para juntar com | e count para contar.
<?php $linha = "maçã,banana,uva"; echo $linha, "\n";
<?php
$linha = "maçã,banana,uva";
$frutas = explode(",", $linha);
echo implode(" | ", $frutas), "\n";
echo count($frutas), " frutas\n";
Resumo
- Uma função recebe argumentos entre parênteses e devolve um valor. As funções de string não mudam a variável: guarde o resultado (
$s = trim($s);). strlenmede,strrevinverte,str_word_countconta palavras (mas não entende acentos).strposdevolve a posição (a partir de 0) oufalse. Compare sempre com!== false.- No PHP 8, para "sim ou não", use
str_contains,str_starts_withestr_ends_with. str_replacetroca,substrrecorta (negativos contam do fim),trimlimpa as pontas.ucfirst,ucwords,strtoupper,strtolowermudam maiúsculas, mas só das letras sem acento.explodequebra um texto em lista;implodejunta uma lista num texto.str_padcompleta,str_repeatrepete,wordwrapquebra na largura,nl2brprepara quebras para o HTML.