[PHP] Metodo che restituisce un array

tonya_atrox

Nuovo Utente
18 Set 2016
15
0
1
44
Sono completamente negata, :(
ho quasi completato un esercizio , sono riuscita a restiruire un array al metodo con i risultati esatti rischiesti dal problema , pero' nel momento in cui richiamo una funzione con l'array restituito , non ottengo il risultato esatto e che mi porti al completamento dell'ercizio.

Cito parte del testo dell'esercizio :
  1. La classe deve fornire i seguenti metodi:


    costruttore a cinque argomenti (nell'ordine specificato nell'elenco precedente) per inizializzare l'oggetto. (Già Creato)

    • metodo chilometriDaUltimoControllo() che restituisce il numero di chilometri percorsi dall'ultimo tagliando effettuato dall'auto x su cui il metodo viene invocato. (Già Creato)

    • metodo autoDaControllare($v, $c) che prende in ingresso un array di auto $v ed un numero $c e restituisce un array contenente tutte le auto contenute nell'array $v che hanno percorso più di $c chilometri dall'ultimo tagliando effettuato. (Già Creato nella classe ma nell'index.php non mi funziona la function confrontaInt )

Spero di essere stata chiara, per togliere ogni dubbio posto qui sotto il codice che ho scritto.
Vorrei capire dove sbaglio :( Grazie a tutti

index.php
PHP:
<?php
include ("classi.php");
$a1 = new Auto("Fiat", "Punto", "A", 20000, 18000);
$a2 = new Auto("Fiat", "Cinquecento", "B", 4000, 3200);
$a3 = new Auto("Peugeot", "207", "C", 55000, 40000);
$a4 = new Auto("Volkswagen", "Golf", "D", 60000, 38000);
$a5 = new Auto("Renault", "Clio", "E", 80000, 70000);
$a6 = new Auto("Ford", "Focus", "F", 75000, 50000);

echo("-- Test costruttore e metodo chilometriDaUltimoControllo:<br>");

confrontaInt($a1->chilometriDaUltimoControllo(), 2000);
confrontaInt($a2->chilometriDaUltimoControllo(), 800);
confrontaInt($a3->chilometriDaUltimoControllo(), 15000);
confrontaInt($a4->chilometriDaUltimoControllo(), 22000);

echo("-- Test metodo autoDaControllare:<br>");

$a = array($a1,$a2,$a3,$a4,$a5,$a6);

$b = Auto::autoDaControllare($a, 10000);

$ris = "";

foreach ($b as $x){
$ris.=$x->targa.",";
}
confronta($ris, "C,D,F,");

function confrontaInt($a, $b) {
echo($a." (corretta: ".$b.") ".($a==$b?"OK":"ERR"));
echo"<br>"; }

function confronta($a, $b) {
echo($a." (corretta: ".$b.") ".($a==$b?"OK":"ERR"));
echo"<br>"; }
?>

classi.php
PHP:
<?php
class Auto{
    public $Marca;
    public $Modello;
    public $Targa;
    public $KmTotaliPercorsi;
    public $KmPercorsiUltimoTagliano;
    
    
    public function __construct ($marca, $modello,$targa,$kmtotalipecorsi,$kmpercorsiultimotagliando){
            $this->Marca=$marca;
            $this->Modello=$modello;
            $this->Targa=$targa;
            $this->KmTotaliPercorsi=$kmtotalipecorsi;
            $this->KmPercorsiUltimoTagliano=$kmpercorsiultimotagliando;   
            
    }
    
    /*
    metodo chilometriDaUltimoControllo() che restituisce il numero di chilometri percorsi dall'ultimo tagliando effettuato dall'auto x su cui il metodo viene invocato.
    */
    
    public function chilometriDaUltimoControllo(){
        $Km_Ultimo_Tagliando = $this->KmPercorsiUltimoTagliano;
        
        return $Km_Ultimo_Tagliando;
        
    }
    
    
    
    /*
    metodo autoDaControllare($v, $c) che prende in ingresso un array di auto $v ed un numero $c e restituisce un array contenente tutte le auto contenute nell'array $v che hanno percorso più di $c chilometri dall'ultimo tagliando effettuato.
    */
    
    public function autoDaControllare($v, $c){
        
    $t = array();
    
$i=0;
foreach ($v AS $key1 => $val1)
  foreach ($val1 AS $key2 => $val2)
      
    if ($key2 == 'Targa')  {
    $t[$i] = $val2;

    } elseif ($key2=='KmPercorsiUltimoTagliano') {
    if ($val2 > $c) {
        //$k[$i] = $val2;
    
    $i = $i + 1;   
    }
    
    }
    
    
    
    
return    $t;
    }
        
    }
    
    
    


?>
 
Dimenticavo che è il Test metodo autoDaControllare non funziona
ecco il risultato quando avvio nel browser il file index.php

-- Test costruttore e metodo chilometriDaUltimoControllo:
18000 (corretta: 2000) ERR
3200 (corretta: 800) ERR
40000 (corretta: 15000) ERR
38000 (corretta: 22000) ERR
-- Test metodo autoDaControllare:
,,,,, (corretta: C,D,F,) ERR
 
Ciao.

Ho ristrutturato il metodo autoDaControllare() e qualcosa qua e là nel tuo index.php (il mio è diventato un file unico). Questo è il risultato, vedi se ti è chiaro.

PHP:
<?php
class Auto {
    public $Marca;
    public $Modello;
    public $Targa;
    public $KmTotaliPercorsi;
    public $KmPercorsiUltimoTagliano;
  
  
    public function __construct ($marca, $modello,$targa,$kmtotalipecorsi,$kmpercorsiultimotagliando) {
            $this->Marca=$marca;
            $this->Modello=$modello;
            $this->Targa=$targa;
            $this->KmTotaliPercorsi=$kmtotalipecorsi;
            $this->KmPercorsiUltimoTagliano=$kmpercorsiultimotagliando; 
    }
  
    /*
    metodo chilometriDaUltimoControllo() che restituisce il numero di chilometri percorsi dall'ultimo tagliando effettuato dall'auto x su cui il metodo viene invocato.
    */
  
    public function chilometriDaUltimoControllo() {
        $Km_Ultimo_Tagliando = $this->KmPercorsiUltimoTagliano;
      
        return $Km_Ultimo_Tagliando;
    }
  
  
  
    /*
    metodo autoDaControllare($v, $c) che prende in ingresso un array di auto $v ed un numero $c e restituisce un array contenente tutte le auto contenute nell'array $v che hanno percorso più di $c chilometri dall'ultimo tagliando effettuato.
    */
  
        public function autoDaControllare($v, $c) {
            $controllare = array();
            $i=0;

            foreach ($v AS $car) {
                if ($car->KmPercorsiUltimoTagliano > $c) {
                    $controllare[$i] = $car;
                    $i++;
                 }
            }

            return $controllare;
       }
}
 


######################################### 
// HO UNITO I DUE FILE PER COMODITÀ
#########################################



?>


<?php
// include ("classi.php");
$a1 = new Auto("Fiat", "Punto", "A", 20000, 18000);
$a2 = new Auto("Fiat", "Cinquecento", "B", 4000, 3200);
$a3 = new Auto("Peugeot", "207", "C", 55000, 40000);
$a4 = new Auto("Volkswagen", "Golf", "D", 60000, 38000);
$a5 = new Auto("Renault", "Clio", "E", 80000, 70000);
$a6 = new Auto("Ford", "Focus", "F", 75000, 50000);

$a = array($a1,$a2,$a3,$a4,$a5,$a6);


echo("<br><strong>TEST COSTRUTTORE E METODO CHILOMETRIDAULTIMOCONTROLLO:</strong><br>");

foreach ($a as $key => $value) {
echo "<br><strong>".($key+1).". Targa: ".$value->Targa."</strong><br>Km percorsi dall'ultimo controllo: ".$value->chilometriDaUltimoControllo()."<br>";
}



echo("<br><br><br><strong>TEST METODO AUTODACONTROLLARE</strong><br><br>");

$max_consentito = 39000;
$b = Auto::autoDaControllare($a, $max_consentito);
echo "<strong>Km massimi consentiti:</strong> ".$max_consentito."<br>";
foreach ($b as $key => $value) {
echo "<br><strong>".($key+1).". Targa: ".$value->Targa."</strong><br>Km percorsi dall'ultimo controllo: ".$value->chilometriDaUltimoControllo()."<br>";
}
echo "<br><br>";
?>
 
  • Like
Reactions: tonya_atrox
Fantastico !!! Con la tua modifica ho finalmente l'array $b ritornato dal metodo autoDaControllare e con dentro i valori che a me servivano.
Senza il tuo aiuto non sarei riuscita a risolvere il problema.
Tutto chiaro sei stato molto gentile, preciso ed esaustivo .
Grazie :)
 

Discussioni simili