Manipular dados é essencial na programação, e na maioria das vezes, os dados são obtidos no formato string
, numa sequência de texto padronizado. Por isso, seria muito bom se pudéssemos converter essa informação para uma array
. A boa notícia é que isso não é uma tarefa impossível.
Vamos ver no exemplo abaixo como criar uma Array a partir de uma string
. Vamos utilizar para nossa explicação a tabela em CSV a seguir, que representa um cadastro de clientes de uma empresa:
ID,Cadastro,Nome,Rua,Número,Cidade,País
1,2023-01-15,João Silva,Rua das Flores,123,São Paulo,SP,Brasil
2,2023-02-20,Maria Oliveira,Avenida Brasil,456,Rio de Janeiro,RJ,Brasil
3,2023-03-10,Carlos Pereira,Rua das Palmeiras,789,Belo Horizonte,MG,Brasil
4,2023-04-25,Sophie Martin,Rue de la Paix,88,Paris,Île-de-France,França
5,2023-05-30,Liam Johnson,Oxford Street,123,London,England,Reino Unido
6,2023-06-18,Anna Müller,Marienplatz,789,Munich,Bavaria,Alemanha
7,2023-07-22,Juan Carlos,Avenida de América,404,Madrid,Madrid,Espanha
8,2023-08-14,Isabela Lima,Avenida Paulista,505,São Paulo,SP,Brasil
9,2023-09-05,Ricardo Alves,Rua do Ouro,606,Brasília,DF,Brasil
10,2023-10-28,Juliana Mendes,Rua das Pedras,707,Fortaleza,CE,Brasil
11,2023-11-01,Louis Dubois,Rue du Bac,202,Paris,Île-de-France,França
12,2023-12-10,Emily Wilson,Baker Street,404,London,England,Reino Unido
13,2024-01-05,Hans Schmidt,Alexanderplatz,505,Berlin,Berlin,Alemanha
14,2024-02-20,Miguel Fernández,Gran Vía,606,Barcelona,Catalonia,Espanha
15,2024-03-15,Kaito Nakamura,Shibuya,707,Tokyo,Tokyo,Japão
16,2024-04-10,Yumi Tanaka,Akihabara,808,Tokyo,Tokyo,Japão
Algumas características importantes dessa tabela são as seguintes:
Primeiro: a primeira linha contém os nomes das colunas;
Segundo: cada coluna tem um tipo diferente de dado. Por exemplo: a coluna ID contém números (integer
), enquanto as colunas Nome em diante contém texto (string
);
e Terceiro: os dados das colunas estão separados por vírgulas;
Realizada essa análise inicial, ficará mais fácil converter essa tabela numa matriz. Vamos aprender como fazer isso.
A função explode
Em PHP, há uma função chamada explode ( )
que tem por objetivo gerar uma Array a partir de uma string
usando como referência um caractere separador. Não concorda que é exatamente disso que estamos precisando agora? Veja como utilizar essa função.
A função explode ( )
aceita 3 argumentos, como se pode ver na sintaxe dela abaixo:
explode (
string $separator,
string $string,
int $limit = PHP_INT_MAX
)
Agora, entenda o que cada argumento significa:
$separator
Obrigatório. É a expressão no formato string
que atua como separadora dos dados. É aquela expressão que "quebra" a string em pedaços, por assim dizer. No exemplo vamos executar a seguir, o nosso separador é o caractere de escape \n
chamado de "quebra de linha" e o caractere vírgula (,
).
$string
Obrigatório. É a expressão no formato string
que se deseja separar. No exemplo da tabela, nossa expressão a ser quebrada será a tabela em si, que não passa de uma grande cadeia de caracteres, e cada linha da tabela.
$limit
Opcional. É a quantidade máxima de elementos que se deseja obter. Por padrão, o valor será a constante PHP_INT_MAX
. No nosso caso, poderíamos usar como limite o número de colunas da tabela, mas se não utilizarmos esse argumento não haverá problemas.
PHP_INT_MAX
é uma constante pré-definida do PHP e representa o maior número inteiro suportado numa instalação do PHP. Para sistemas de 32 bits, o valor máximo geralmente é o inteiro 2.147.483.647 (2 bilhões, 147 milhões . . .), e em sistemas de 64 bits, o valor máximo é 9.223.372.036.854.775.807 (9 quintilhões, 223 quatrilhões . . .).
Com essas explicações, podemos agora seguir em frente e separar os dados.
No exemplo abaixo, a variável $table
já recebeu os dados da tabela e agora vamos processá-los com a função explode
. Observe que teremos que usar essa função 2 vezes, uma para separar as linhas e outra para separar as células de cada linha. Veja como fica:
// Irá receber os dados da tabela
$data = [ ];
// separa as linhas
$lines = explode ( "\n", $table);
// lê linha por linha
foreach($lines as $line){
// separa as células das linhas
$cell = explode(",", $line);
// adiciona cada célula à variável $data
array_push($data, $cell);
}
// exibe alguns resultados
echo $data[2][5] . "
";
echo $data[2][6] . "
";
echo $data[2][7] . "
";
echo $data[6][4] . "
";
echo $data[6][5] . "
";
Como falado antes, não é necessário usar o argumento $limit
nesse caso porque a quantidade de dados que temos de processar é pequena e previsível. Mas, usamos os dois primeiros argumentos da função explode ( )
: $separator
e $string
.
No primeiro uso de explode ( )
(como pode ver abaixo)
$lines = explode ("\n", $table);
criamos uma array chamada $lines
. Veja que $separator
contém a expressão especial \n
que significa "quebra de linha" com o objetivo de separar as linhas da string $table
.
Dessa forma, foi possível usar um loop em cada uma das linhas para se obter os valores em cada célula. Para obter os valores de cada célula, usamos novamente a função explode ( )
, como se vê no código:
$cells = explode(",", $line);
Nesse segundo uso de explode ( )
, separamos cada célula através do caractere vírgula (,
), gerando uma Array chamada $cell
. Em seguida, essa Array foi adicionada a outra Array chamada $data
usando a função array_push ( )
.
Esse processo foi se repetindo linha por linha até a última linha da tabela. No fim, obtivemos uma Matriz de Arrays chamda $data
. Veja que é possível acessar os dados da tabela através dos índices da matriz $data
, onde o primeiro número é a linha e o segundo número representa a coluna.
Assim, o código acima retorna o seguinte:
Rio de Janeiro
RJ
Brasil
789
Munich
Conclusão
De maneira bastante simplificada, convertemos uma tabela para uma Matriz. Percebeu que, apesar do objetivo de explode ( )
ser simples, quando ele é usado num ambiente de repetição, os resultados podem se tornar cada vez mais complexos. Então, é muito importante nos seus estudos de programação entender o que cada operação realiza separadamente para depois construir sistemas mais complexos.
Tenho certeza que você vai querer usar a função explode ( )
sempre que puder! d :