Dados txt - Array bidimansional - Agrupamento de dados por registro

Enviada por Johnny 
Minha estrutura do arquivo TXT, é esta:
Preciso ler, linha alinha e agrupar pelo (Cd), que é o único indice de cada registro. Assim, esse (Cd) refere-se a cada novo registro, podendo conter sub indices diversos - (11), (22), (Co), etc. Estes sub indices podem conter uma linha adicional (ver exemplo do (Co), no primeiro registro, que deve concatenar as linhas contendo "para gabinete" e "para armario.").

inventario.txt
//inicio
No 0012 de 31/01/2016
No 0012 de 31/01/2016
(Cd) 12345
(11) Cod1-023
(22) 22/12/1945
(Co) travamento de portas
para gabinete
para armario.
(Cd) 23456
(11) Cod1-055
(21) 01/01/2005
(22) gaveteiro
ferro
,madeira
,aluminio
(Cd) 78920
(22) Cod1-077
(54) 22/02/1975
(Co) clipe
aluminio ou ferro
(74) anodizado
(Cd) 0002525
(Di) Cod4-07100
(11) 22/02/2017
(22) camisa
vermelha
verde
(54) botoes amarelos
(Co) manga
,abacate
,cereja

//fim
Implementei a rotina a seguir mas, após muita pesquisa e modificações, não consegui agrupar os sub indices:
Juntamente , necessito de uma rotina para transferir os dados do array para variaveis e, posteriormente, para o BD do mysql.

Se alguém puder me dar uma luz, agradeço.

<?php


$cd = [];
$grupo = [];

$contador = 0;

$arquivo = fopen('inventario.txt', 'r');
while (!feof($arquivo)) {
$linha = trim(fgets($arquivo, 1024));

//$linha = trim($linha);

if (substr($linha, 0, 4) == '(Cd)') {
$contador = 0;
if (!empty($grupo)) {
$cd[$id] = $grupo;
$grupo = [];
$contador = 0;
}

$id = substr($linha, 5, strlen($linha)-5 );
$cd[$id][] = $linha;
} else {

if (substr($linha, 0, 4) !== '(11)') {
if (isset($grupo[$contador-1])) {
$grupo[$contador -1] .= ' ' . $linha;
$contador--;
}
} else {
$grupo[] = $linha;
}
$contador++;

}


}

$cd[$id] = $grupo;

fclose($arquivo);



echo '<pre>';
print_r($cd); exit;

//-------------------------
//Rotina para transferir os dados do array para variaveis
$keys = array_keys($cd);
for($i = 0; $i < count($cd); $i++) {
echo $keys[$i] . "<br>";
foreach($cd[$keys[$i]] as $key => $value) {
echo $key . " : " . $value . "<br>";
}
echo "<br>";
}
Eduardo Molina
Re: Dados txt - Array bidimansional - Agrupamento de dados por registro
01 de March de 2017 às 08:38AM
bom dia, não comprendi o teu arquivo txt, O que exatamente é isso ai digo, o que sao ou quais sao os indices que tu utilizou. digamos, sei la, (codigo, nome, cidade, telefone, etc) ficou meio vago, para lhe ajudar.
Eduardo, o arquivo tem essa estrutra aí:

No 0012 de 31/01/2016 >>>Nr e data do arquivo
No 0012 de 31/01/2016 >>>Nr e data do arquivo
(Cd) 12345 >>>(Cd) é o índice exclusivo de cada novo registro
(11) Cod1-023 >>>sub indice(11) pertence ao (Cd) 12345 acima
(22) 22/12/1945 >>>sub indice(22) pertence ao (Cd) 12345 acima
(Co) travamento de portas >>>sub indice(Co) pertence ao (Cd) 12345 acima
para gabinete >>> pertence ao (Cd) 12345 acima. É continuação do sub indice (Co)
para armario. >>> pertence ao (Cd) 12345 acima. É continuação do sub indice (Co)
(Cd) 23456 >>>(Cd) é o índice exclusivo de cada novo registro ...começa novo registro com sub indices próprios
Eduardo Molina Escreveu:
-------------------------------------------------------
> bom dia, não comprendi o teu arquivo txt, O que
> exatamente é isso ai digo, o que sao ou quais sao
> os indices que tu utilizou. digamos, sei la,
> (codigo, nome, cidade, telefone, etc) ficou meio
> vago, para lhe ajudar.


Eduardo, consegue me auxiliar com meu problema?
Você precisa estar logado no PHPBrasil.com para poder enviar mensagens para os nossos fóruns.

Faça o login aqui.