Here's a way to do this:
function readMyFile($file) {
$data = file_get_contents($file);
$collection = explode("\n",$data);
$collection = array_filter($collection);
$keys = array(
'id_usuario',
'mes',
'ano',
'ordem',
'entidade',
'valor_gasto',
'categoria'
);
$return = array();
if (count($collection)) {
foreach ($collection as $linha => $collection_pipes) {
$resultLine = explode('|',$collection_pipes);
$resultMap[$linha] = array_map(function($a, $b) {
if ($a == 'valor_gasto') {
//remove os zeros
$b = (int) $b;
}
return array($a => trim($b));
},$keys, $resultLine);
/* se for remover o índice 0,
coloque o trecho do código abaixo aqui */
}
}
return $resultMap;
}
$saida = readMyFile('seuarquivo.txt');
//sua saída
echo '<pre>';
print_r($saida);
Whereas your file breaks lines, the output will be:
Array
(
[0] => Array
(
[0] => Array
(
[id_usuario] => 000001
)
[1] => Array
(
[mes] => 06
)
[2] => Array
(
[ano] => 2015
)
[3] => Array
(
[ordem] => 001
)
[4] => Array
(
[entidade] => MENSALIDADE JUNHO DE 2015
)
[5] => Array
(
[valor_gasto] => 3000
)
[6] => Array
(
[categoria] => D
)
)
[1] => Array
(
[0] => Array
(
[id_usuario] => 000001
)
[1] => Array
(
[mes] => 06
)
[2] => Array
(
[ano] => 2015
)
[3] => Array
(
[ordem] => 002
)
[4] => Array
(
[entidade] => CLUBE CRUZEIRO DO SUL
)
[5] => Array
(
[valor_gasto] => 4500
)
[6] => Array
(
[categoria] => D
)
)
[2] => Array
(
[0] => Array
(
[id_usuario] => 000005
)
[1] => Array
(
[mes] => 06
)
[2] => Array
(
[ano] => 2015
)
[3] => Array
(
[ordem] => 001
)
[4] => Array
(
[entidade] => DEVOLUCAO DE CREDITO PARA SOCIO
)
[5] => Array
(
[valor_gasto] => 7500
)
[6] => Array
(
[categoria] => C
)
)
)
To remove the duplicate numeric index, just put this snippet of code inside foreach :
$resultMap[$linha] = array('id_usuario'=>$resultMap[$linha][0]['id_usuario'],
'mes'=>$resultMap[$linha][1]['mes'],
'ano'=>$resultMap[$linha][2]['ano'],
'ordem'=>$resultMap[$linha][3]['ordem'],
'entidade'=>$resultMap[$linha][4]['entidade'],
'valor_gasto'=>$resultMap[$linha][5]['valor_gasto'],
'categoria'=>$resultMap[$linha][6]['categoria']);
Or if you prefer, put this after the foreach:
$resultMap = array_map(function($arr) {
return array_merge($arr[0],$arr[1],$arr[2],$arr[3],$arr[4],$arr[5],$arr[6]);
}, $resultMap);
return $resultMap;
The other way to do this is:
function readMyFile($file) {
$content = fopen($file, "r");
if ($content) {
$total = 0;
$collection = array();
while (($line = fgets($content)) !== false) {
$data = explode("|",$line);
$collection[$total] = array(
'id_usuario' => $data[0],
'mes' => $data[1],
'ano' => $data[2],
'ordem' => $data[3],
'entidade' => $data[4],
'valor_gasto'=>(int) $data[5],
'categoria' => $data[6]
);
$total++;
}
return $collection;
fclose($content);
}
$collection = readMyFile('seuarquivo.txt');
echo '<pre>';
print_r($collection);