4
respostas

quebrar array em linhas

estou com um problema que é como quebrar um array lido de um arquivo .txt.

meuArquivo.txt

primeiroParametro; segundoParametro; terceiroParametro
primeiroParametro; segundoParametro, terceiroParametro

usando o comando file() obtenho uma lista em que cada linha do arquivo se torna um array, por exemplo:

$primeiroArray = file('meuArquivo.txt');

retorno:

array(6) {
  [0]=>
  string(2) "
"
  [1]=>
  string(33) "256;segundoParametro;terceiroParametro"
  [2]=>
  string(33) "257;segundoParametro;terceiroParametro"
  [3]=>
  string(35) "258;segundoParametro;terceiroParametro"
  [4]=>
  string(39) "259;segundoParametro;terceiroParametro"
  [5]=>
  string(39) "260;segundoParametro;terceiroParametro"
}

imagino que a solução passe pelo uso do explode mas não faço idéia de como por em prática.

4 respostas

Isso mesmo, seria com explode, ele vai criar um array com o conteúdo da linha de acordo com o separado que você informar

https://www.geeksforgeeks.org/php-explode-function/

Aqui tem um exemplo da primeira linha


$primeiroArray = file('meuArquivo.txt');

$primeira_linha = $primeiroArray[0];

$conteudo = explode(";",  $primeira_linha);

print_r($conteudo);

copiei esse seu código e pelo que vi cada item dentre os ";" passaria a ser um array certo?

o meu interesse era que cada parametro entre ponto e virgula(;) de uma linha do arquivo .txt passasse a ser uma linha de um array. Por exemplo:

"256;segundoParametro;terceiroParametro"

retorno:

array(12) {
  ["id"]=>
  string(79) "256"
  [0]=>
  string(79) "256"
  ["nome"]=>
  string(125) "segundoParametro"
  [1]=>
  string(125) "segundoParametro"
  ["endereco"]=>
  string(3693)
  [2]=>
  string(3693) " terceiroParametro "

como se estivesse lendo um Banco de Dados

id = 256
nome = João
endereco = rua A

Não sei se fui claro mas é mais ou menos assim, para que a cada loop ele carregue uma linha do arquivo .txt

Olá Marcos,

Nesse caso acredito que a função array_combine vai ser útil para você. Essa função recebe dois arrays para montar um array associativo, mais informações na documentação do PHP.

// Array com as chaves
$chaves = ['id', 'param1', 'param2'];

$file = file("dados.txt");
$array_final = [];

foreach ($file as $linha) {
    // Utiliza o explode para transformar em
    // um array como o Daniel explicou
    $valores = explode(';', trim($linha));

    // Utiliza o array_combine para juntar o
    // array de chaves e o de valores em um só
    $array_final[] = array_combine($chaves, $valores);
}

var_dump($array_final);

Arquivo TXT:

256;segundoParametro;terceiroParametro
256;segundoParametro;terceiroParametro
256;segundoParametro;terceiroParametro

Resultado:

array(3) {
  [0]=>
  array(3) {
    ["id"]=>
    string(3) "256"
    ["param1"]=>
    string(16) "segundoParametro"
    ["param2"]=>
    string(17) "terceiroParametro"
  }
  [1]=>
  array(3) {
    ["id"]=>
    string(3) "256"
    ["param1"]=>
    string(16) "segundoParametro"
    ["param2"]=>
    string(17) "terceiroParametro"
  }
  [2]=>
  array(3) {
    ["id"]=>
    string(3) "256"
    ["param1"]=>
    string(16) "segundoParametro"
    ["param2"]=>
    string(17) "terceiroParametro"
  }
}

Marcos, a gente viu exatamente como fazer isso na parte de tratamento de CSV. :-D

Você já conseguiu resolver seu problema?

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software