Visualizzazione dei risultati da 1 a 3 su 3

Discussione: Problema con funzioni

  1. #1

    Problema con funzioni

    Salve ragazzi, ho un problema col seguente script.
    In pratica vorrei ripetere il processo per ogni stazione e stampare a schermo i dati di tutte le stazioni.
    Ho messo un foreach, ma in questo modo mi da errore di redeclare.
    Vi posto il codice per interno, è un pò lunghetto, spero possiate darmi una mano.
    Codice PHP:
    $stazioni= array('LIMG','LIEA','LIBA','LIPA','LIYW','LIBD','LIME','LIPE','LIPB','LIPL','LIPO','LIBR','LIEE','LIEB','LIEC','LIMU','LIQC','LICC','LICZ','LIPC','LICO','LIBC','LIMZ','LIED','LIVD','LIPY','LIPF','LIRQ','LIPK','LIVF','LIRH','LICL','LIMJ','LIBV','LIRM','LIRS','LIBG','LIRG','LICA','LICD','LIRL','LIBN','LIBH','LICF','LIML','LIMC','LIQO','LIVC','LIMY','LIBQ','LIRK','LIRN','LIMN','LIEO','LIVP','LICJ','LICP','LICG','LIMP','LIMV','LIMT','LIVR','LIRZ','LIBP','LIMS','LIMH','LIRP','LIRE','LIVM','LICR','LIVE','LIQN','LIPR','LIRA','LIRU','LIRF','LIPQ','LIBY','LIQW','LIVO','LIMK','LIMF','LICT','LIRT','LIPS','LIPH','LIVT','LIPI','LICU','LIPZ','LIPX','LIPT','LIRV');

    foreach (
    $stazioni as $valore)
    {
    $stazione $valore/*$_GET['stazione']*/;
    $wxInfo['STAZIONE'] = $stazione;

    $metar get_metar($stazione,$wxInfo);
    process_metar($metar,$wxInfo);

      
    // **** OUTPUT ****
    echo "METAR = $metar

    \n"
    ;
    print_wxInfo($wxInfo);  // Modify this function to fit your needs.

        
    }

    //FUNZIONI#############################################
    function get_metar($stazione, &$wxInfo) {
        
    $fileName="http://weather.noaa.gov/pub/data/observations/metar/stations/$stazione.TXT";
        
    $metar '';
        
    $fileData = @file($fileName);  // or die('Data not available');
        
    if ($fileData != false) {
            list(
    $i$date) = each($fileData);
            
    $utc strtotime(trim($date));
            
    set_time_data($utc,$wxInfo);
            while (list(
    $i$line) = each($fileData)) {
                
    $metar .= ' ' trim($line);
                }
            
    $metar trim(str_replace('  '' '$metar));
            }
        return 
    $metar;
        }

    function 
    set_time_data($utc, &$wxInfo) {

        
    $timeZoneOffset date('Z');
        
    $local $utc $timeZoneOffset;
        
    $wxInfo['OBSERVED'] = date('D M j, H:i T',$local);
        
    $now time();
        
    $wxInfo['NOW'] = date('D M j, H:i T',$now);
        
    $timeDiff floor(($now $local) / 60);
        if (
    $timeDiff 91$wxInfo['AGE'] = "$timeDiff min ago";
        else {
            
    $min $timeDiff 60;
            if (
    $min 10$min '0' $min;
            
    $wxInfo['AGE'] = floor($timeDiff 60) . ":$min hr ago";
            }
        }

    function 
    process_metar($metar, &$wxInfo) {
        
        if (
    $metar != '') {
            
    $metarParts explode(' ',$metar);
            
    $groupName = array('get_station','get_time','get_station_type','get_wind','get_var_wind','get_visibility','get_runway','get_conditions','get_cloud_cover','get_temperature','get_altimeter');
            
    $metarPtr 1;  // get_station identity is ignored
            
    $group 1;
            while (
    $group count($groupName)) {
                
    $part $metarParts[$metarPtr];
                
    $groupName[$group]($part,$metarPtr,$group,$wxInfo);  // $groupName is a function variable
                
    }
            }
        else 
    $wxInfo['ERROR'] = 'Data not available';
        }

    function 
    get_station($part, &$metarPtr, &$group, &$wxInfo) {

        if (
    strlen($part) == and $group == 0) {
            
    $group++;
            
    $metarPtr++;
            }
        }

    function 
    get_time($part, &$metarPtr, &$group, &$wxInfo) {
        if (
    substr($part,-1) == 'Z'$metarPtr++;
        
    $group++;
        }

    function 
    get_station_type($part, &$metarPtr, &$group, &$wxInfo) {
        if (
    $part == 'AUTO' || $part == 'COR'$metarPtr++;
        
    $group++;
        }

    function 
    get_wind($part, &$metarPtr, &$group, &$wxInfo) {

        function 
    speed($part$unit) {

            if (
    $unit == 'KT'$speed round(1.1508 $part);         // from knots
            
    elseif ($unit == 'MPS'$speed round(2.23694 $part);   // from meters per second
            
    else $speed round(0.621371 $part);                     // from km per hour
            
    $speed "$speed mph";
            return 
    $speed;
            }
        
        if (
    ereg('^([0-9G]{5,10}|VRB[0-9]{2,3})(KT|MPS|KMH)$',$part,$pieces)) {
            
    $part $pieces[1];
            
    $unit $pieces[2];
            if (
    $part == '00000') {
                
    $wxInfo['WIND'] = 'calm';  // no wind
                
    }
            else {
                
    ereg('([0-9]{3}|VRB)([0-9]{2,3})G?([0-9]{2,3})?',$part,$pieces);
                if (
    $pieces[1] == 'VRB'$direction 'varies';
                else {
                    
    $angle = (integer) $pieces[1];
                    
    $compass = array('N','NNE','NE','ENE','E','ESE','SE','SSE','S','SSW','SW','WSW','W','WNW','NW','NNW');
                    
    $direction $compass[round($angle 22.5) % 16];
                    }
                if (
    $pieces[3] == 0$gust '';
                else 
    $gust ', gusting to ' speed($pieces[3], $unit);
                
    $wxInfo['WIND'] = $direction ' at ' speed($pieces[2], $unit) . $gust;
                }
            
    $metarPtr++;
            }
        
    $group++;
        }

    function 
    get_var_wind($part, &$metarPtr, &$group, &$wxInfo) {

        if (
    ereg('([0-9]{3})V([0-9]{3})',$part,$pieces)) $metarPtr++;
        
    $group++;
        }



    function 
    get_runway($part, &$metarPtr, &$group, &$wxInfo) {

        if (
    substr($part,0,1) == 'R'$metarPtr++;
        else 
    $group++;
        }



    function 
    get_cloud_cover($part, &$metarPtr, &$group, &$wxInfo) {

        static 
    $cloudCode = array(
            
    'SKC' => 'clear skies',
            
    'CLR' => 'clear skies',
            
    'FEW' => 'partly cloudy',
            
    'SCT' => 'scattered clouds',
            
    'BKN' => 'mostly cloudy',
            
    'OVC' => 'overcast',
            
    'VV'  => 'vertical visibility');
        if (
    $part == 'SKC' || $part == 'CLR') {
            
    $wxInfo['CLOUDS'] = $cloudCode[$part];
            
    $metarPtr++;
            
    $group++;
            }
        else {
            if (
    ereg('^([A-Z]{2,3})([0-9]{3})',$part,$pieces)) {  // codes for CB and TCU are ignored
                
    $wxInfo['CLOUDS'] = $cloudCode[$pieces[1]];
                if (
    $pieces[1] == 'VV') {
                    
    $altitude = (integer) 100 $pieces[2];  // units are feet
                    
    $wxInfo['CLOUDS'] .= " to $altitude ft";
                    }
                
    $metarPtr++;
                }
            else {
                
    $group++;
                }
            }
        }


    function 
    print_wxInfo($wxInfo) {

        
    $dots '...............';
        foreach(
    $wxInfo As $wxIndex => $wx) {
            if (
    strlen($wx) != 0) echo $wxIndex substr($dots,0,strlen($dots)-strlen($wxIndex)) . $wx
    \n"
    ;
            }
        } 

  2. #2
    Il problema è relativo alla definizione della funzione speed() all'interno di get_wind().

    Sposta la definizione di speed() all'esterno di get_wind() e non dovresti ottenere più l'errore.

  3. #3
    Perfetto, adesso va, grazie mille!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.