Logica applicativa... Le domande da porci sono.. 1)L'origine dei dati (in questo caso un file CSV avendo 8 campi tra cui 7 numerici e 1 stringa, tutti separati dal tabulatore e new line per i nuovi campi). 2)che operazioni dovremmo svolgere, in questo caso operazioni aritmetiche. Per sostituire una stringa si può ricorrere a strtr, ho invertito la data... Poiché non mi sembrava da AAAA-MM-DD. *si noti che uso UTC 0 .. cioè a meno due ore del nostro fuso orario dunque la funzione time restituirebbe -2 ore.
Codice PHP:
<?php
/* Define our filter class */
class converter_filter extends php_user_filter {
function filter($in, $out, &$consumed, $closing)
{
while ($bucket = stream_bucket_make_writeable($in)) {
$bucket->data = preg_replace('/(\d{4})(-\d{2})(-\d{2})/', '$1$3$2', strtr(strtr(strtr($bucket->data, '%', '"'), ',', '.'), array('"' => '')));
$consumed += $bucket->datalen;
stream_bucket_append($out, $bucket);
}
return PSFS_PASS_ON;
}
}
/* Register our filter with PHP */
stream_filter_register('converter', 'converter_filter')
or die('Failed to register filter');
$fp = file('php://filter/read=converter/resource=rapporto.csv', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
date_default_timezone_set('UTC');
$m = 0;
$m2 = 0;
foreach ($fp as &$value) {
$n = 0;
$value = explode("\x09", strtotime(substr($value,0, 10)).substr($value, 10));
foreach ($value as &$values) {
if(!strpos($values, '.')) {
$values = (int) $values;
}else{
$values = (double) $values;
}
++$n;
if($n != 1){
if(!$m2){
$val[$m++] = $values;
}else{
$val[$m++] += $values;
}
if($n == 8){
$m = 0;
$m2 =2;
}
}
}
}
unset($value,$values);
var_dump($val);
?>