[PHP]Funzione di calcolo prezzo di una camera in un range di date

Allora ho fatto tutto come mi hai indicato. Le query da sole funzionano correttamente ma se le inserisco nella funzione il risultato è sempre NULL. Ho modificato anche tutti i parametri date e room e non credo ci siano ancora errori.
Puoi testarla anche tu? Grazie!
PHP:
$hostname = "localhost";
$pass   = "PASSWORD";
$muser  = "USER";
$db ="DB";
$mysqli = @new mysqli($hostname, $muser, $pass, $db);
if( mysqli_connect_errno())
{
  die(mysqli_connect_error());
}

$room="1";
$start_date="2019-08-26"; // data di arrivo
$end_date="2019-08-30"; // data di partenza


function get_diff_Date($dt1,$dt2){
   $start_date=new DateTime($dt1);
   $end_date=new DateTime($dt2);
   $diff=$data_out->diff($start_date);
   $create_date=[];
   for ($i=1;$i<=$diff->days;$i++) {
      $start_date->add(new DateInterval('P1D'));
      $create_date[]=
         [
            'date'=>$start_date->format('d/m/Y'),
            'day'=>$start_date->format('w'),
            'label_day'=>$start_date->format('l')
         ];
   }
   return $create_date;
}

function find_sconto(){
   /*
      'sconto'=>0,
   //percentuale o fisso (fixed)
      'type'=>'percentage',
      'skip_if_0'=>TRUE
   /*/
   $model_return=['sconto'=>0,'type'=>'percentage','ship_0'=>TRUE];
   return $model_return;
}

function cal_price_($room,$start_date,$end_date){

   $date_diff=get_diff_Date($start_date,$end_date);
   $model_result=
      [
         'operation'=>
            [
               'plus'=>[
                  'custom'=>0,
                  'normal'=>0
               ],
               'minus'=>find_sconto()
            ],
         'total'=>0,
         'per_night'=>0
      ];


$query=$mysqli->query('SELECT * FROM room WHERE id = '.$room);
$data=json_decode(json_encode($query->fetch_all(MYSQLI_ASSOC)));
//print_r($data);


$query=$mysqli->query('SELECT * FROM room_custom_price WHERE (DATE(certain_date) BETWEEN "'.$start_date.'" AND "'.$end_date.'")');
$data_custom=json_decode(json_encode($query->fetch_all(MYSQLI_ASSOC)));
//print_r($data_custom);

   $map=['price_sun','price_mon','price_tue','price_wed','price_thu','price_fri','price_sat'];

   if(!empty($data_custom)){
      //non ci sono prezzi personalizzati
      foreach ($data_custom as $k=>$items){
         $model_result['operation']['plus']['custom']+=$items->price;
      }
   }
   foreach ($date_diff as $k=>$v){
      foreach ($data as $jey_q=>$value_q){
         $day=$map[$v['day']];
         $model_result['operation']['plus']['normal']+=$value_q->$day;
      }
   }
   foreach ($model_result['operation']['plus'] as $k=>$v){
      $model_result['total']+=$v;
   }
   $model_result['per_night']=$model_result['total']/count($date_diff);

   return $model_result;
}


var_dump($model_result);
 
var_dump($model_result);
Certo che model_result è vuoto, è il ritorno della funzione....
Aggiungi mysqli dentro la funzione o lo passi alla funzione.
quindi....
PHP:
//intestazione funzione
function cal_price_($room,$start_date,$end_date){
$hostname = "localhost";
$pass   = "PASSWORD";
$muser  = "USER";
$db ="DB";
$mysqli =new mysqli($hostname,$muser,$pass,$db);
   $date_diff=get_diff_Date($start_date,$end_date);
........//tutto il contenuto sotto

}
//dopo la chiusura della funzione
print_r(cal_price_($room,$start_date,$end_date));
 
Il problema non sta nelle query che se le utilizzo da sole sono corrette mi danno i risultati.
Se invece le inserisco nella funzione il risultato è null. Ho cambiato anche ci con mysqli ma nulla.
Puoi testare tutto il codice che ti posto anche tu?
PHP:
$hostname = "localhost";
$pass   = "PASSWORD";
$muser  = "USER";
$db ="DATABASE";
$mysqli = @new mysqli($hostname, $muser, $pass, $db);
if( mysqli_connect_errno()) 
{
  die(mysqli_connect_error());
}

$room="1";
$start_date="2019-08-26"; // data di arrivo
$end_date="2019-08-30"; // data di partenza


function get_diff_Date($dt1,$dt2){
   $start_date=new DateTime($dt1);
   $end_date=new DateTime($dt2);
   $diff=$data_out->diff($start_date);
   $create_date=[];
   for ($i=1;$i<=$diff->days;$i++) {
      $start_date->add(new DateInterval('P1D'));
      $create_date[]=
         [
            'date'=>$start_date->format('d/m/Y'),
            'day'=>$start_date->format('w'),
            'label_day'=>$start_date->format('l')
         ];
   }
   return $create_date;
}

function find_sconto(){
   /*
      'sconto'=>0,
   //percentuale o fisso (fixed)
      'type'=>'percentage',
      'skip_if_0'=>TRUE
   /*/
   $model_return=['sconto'=>0,'type'=>'percentage','ship_0'=>TRUE];
   return $model_return;
}

function cal_price_($room,$start_date,$end_date){
   $mysqli=&get_instance();
   $date_diff=get_diff_Date($start_date,$end_date);
   $model_result=
      [
         'operation'=>
            [
               'plus'=>[
                  'custom'=>0,
                  'normal'=>0
               ],
//da implementare le regole di calcolo
               'minus'=>find_sconto()
            ],
         'total'=>0,
         'per_night'=>0
      ];

$query=$mysqli->query('SELECT * FROM room WHERE id = '.$room);
$data=json_decode(json_encode($query->fetch_all(MYSQLI_ASSOC)));
print_r($data);


$query=$mysqli->query('SELECT * FROM room_custom_price WHERE (DATE(certain_date) BETWEEN "'.$start_date.'" AND "'.$end_date.'")');
$data_custom=json_decode(json_encode($query->fetch_all(MYSQLI_ASSOC)));
print_r($data_custom);

   $map=['price_sun','price_mon','price_tue','price_wed','price_thu','price_fri','price_sat'];

   if(!empty($data_custom)){
      //non ci sono prezzi personalizzati
      foreach ($data_custom as $k=>$items){
         $model_result['operation']['plus']['custom']+=$items->price;
      }
   }
   foreach ($date_diff as $k=>$v){
      foreach ($data as $jey_q=>$value_q){
         $day=$map[$v['day']];
         $model_result['operation']['plus']['normal']+=$value_q->$day;
      }
   }
   foreach ($model_result['operation']['plus'] as $k=>$v){
      $model_result['total']+=$v;
   }
   $model_result['per_night']=$model_result['total']/count($date_diff);

   return $model_result;
}


var_dump($model_result);
 
Scusami ma hai testato il codice perché come da tue indicazioni comunque non mi stampa nulla.
Puoi cortesemente provare questo codice in una pagina test?

PHP:
function cal_price_($room,$start_date,$end_date){
$hostname = "localhost";
$pass   = "PASSWORD";
$muser  = "USER";
$db ="DATABASE";
$mysqli = @new mysqli($hostname, $muser, $pass, $db);
if( mysqli_connect_errno()) 
{
  die(mysqli_connect_error());
}

$room="1";
$start_date="2019-08-26"; // data di arrivo
$end_date="2019-08-30"; // data di partenza


function get_diff_Date($dt1,$dt2){
   $start_date=new DateTime($dt1);
   $end_date=new DateTime($dt2);
   $diff=$data_out->diff($start_date);
   $create_date=[];
   for ($i=1;$i<=$diff->days;$i++) {
      $start_date->add(new DateInterval('P1D'));
      $create_date[]=
         [
            'date'=>$start_date->format('d/m/Y'),
            'day'=>$start_date->format('w'),
            'label_day'=>$start_date->format('l')
         ];
   }
   return $create_date;
}

function find_sconto(){
   /*
      'sconto'=>0,
   //percentuale o fisso (fixed)
      'type'=>'percentage',
      'skip_if_0'=>TRUE
   /*/
   $model_return=['sconto'=>0,'type'=>'percentage','ship_0'=>TRUE];
   return $model_return;
}

function cal_price_($room,$start_date,$end_date){
   $mysqli=&get_instance();
   $date_diff=get_diff_Date($start_date,$end_date);
   $model_result=
      [
         'operation'=>
            [
               'plus'=>[
                  'custom'=>0,
                  'normal'=>0
               ],
//da implementare le regole di calcolo
               'minus'=>find_sconto()
            ],
         'total'=>0,
         'per_night'=>0
      ];
$query=$mysqli->query('SELECT * FROM room WHERE id = '.$room);
$data=json_decode(json_encode($query->fetch_all(MYSQLI_ASSOC)));
print_r($data);

$query=$mysqli->query('SELECT * FROM room_custom_price WHERE (DATE(certain_date) BETWEEN "'.$start_date.'" AND "'.$end_date.'")');
$data_custom=json_decode(json_encode($query->fetch_all(MYSQLI_ASSOC)));
print_r($data_custom);

   $map=['price_sun','price_mon','price_tue','price_wed','price_thu','price_fri','price_sat'];

   if(!empty($data_custom)){
      //non ci sono prezzi personalizzati
      foreach ($data_custom as $k=>$items){
         $model_result['operation']['plus']['custom']+=$items->price;
      }
   }
   foreach ($date_diff as $k=>$v){
      foreach ($data as $jey_q=>$value_q){
         $day=$map[$v['day']];
         $model_result['operation']['plus']['normal']+=$value_q->$day;
      }
   }
   foreach ($model_result['operation']['plus'] as $k=>$v){
      $model_result['total']+=$v;
   }
   $model_result['per_night']=$model_result['total']/count($date_diff);

   return $model_result;
}
}
//dopo la chiusura della funzione
print_r(cal_price_($room,$start_date,$end_date));
 
Scusami ma hai testato il codice perché come da tue indicazioni comunque non mi stampa nulla.
Il dubbio non mi viene sul codice, ma su come lo chiami tu in quanto non richiami nulla!!!!
La connessione nella funziona non la passi e non la crei come fa a fare la query???

Se invece le inserisco nella funzione il risultato è null. Ho cambiato anche ci con mysqli ma nulla.
Ma la funzione tu non la chiami, come ti fa a dare risultato????

Qui l'esempio con il codice funzionante....
https://perms.madi-solution.it/test_calcolo


PHP:
/*$hostname = "localhost";
$pass   = "PASSWORD";
$muser  = "USER";
$db ="DATABASE";
$mysqli = @new mysqli($hostname, $muser, $pass, $db);
if( mysqli_connect_errno())
{
  die(mysqli_connect_error());
}*/

$room="1";
$start_date="2019-08-26"; // data di arrivo
$end_date="2019-08-30"; // data di partenza


function get_diff_Date($dt1,$dt2){
   $start_date=new DateTime($dt1);
   $end_date=new DateTime($dt2);
   $diff=$data_out->diff($start_date);
   $create_date=[];
   for ($i=1;$i<=$diff->days;$i++) {
      $start_date->add(new DateInterval('P1D'));
      $create_date[]=
         [
            'date'=>$start_date->format('d/m/Y'),
            'day'=>$start_date->format('w'),
            'label_day'=>$start_date->format('l')
         ];
   }
   return $create_date;
}

function find_sconto(){
   /*
      'sconto'=>0,
   //percentuale o fisso (fixed)
      'type'=>'percentage',
      'skip_if_0'=>TRUE
   /*/
   $model_return=['sconto'=>0,'type'=>'percentage','ship_0'=>TRUE];
   return $model_return;
}

function cal_price_($room,$start_date,$end_date){
 //  $mysqli=&get_instance();
 $mysqli=new mysqli('host','user','pass','database');
 $date_diff=get_diff_Date($start_date,$end_date);
   $model_result=
      [
         'operation'=>
            [
               'plus'=>[
                  'custom'=>0,
                  'normal'=>0
               ],
//da implementare le regole di calcolo
               'minus'=>find_sconto()
            ],
         'total'=>0,
         'per_night'=>0
      ];

$query=$mysqli->query('SELECT * FROM room WHERE id = '.$room);
$data=json_decode(json_encode($query->fetch_all(MYSQLI_ASSOC)));
print_r($data);


$query=$mysqli->query('SELECT * FROM room_custom_price WHERE (DATE(certain_date) BETWEEN "'.$start_date.'" AND "'.$end_date.'")');
$data_custom=json_decode(json_encode($query->fetch_all(MYSQLI_ASSOC)));
print_r($data_custom);

   $map=['price_sun','price_mon','price_tue','price_wed','price_thu','price_fri','price_sat'];

   if(!empty($data_custom)){
      //non ci sono prezzi personalizzati
      foreach ($data_custom as $k=>$items){
         $model_result['operation']['plus']['custom']+=$items->price;
      }
   }
   foreach ($date_diff as $k=>$v){
      foreach ($data as $jey_q=>$value_q){
         $day=$map[$v['day']];
         $model_result['operation']['plus']['normal']+=$value_q->$day;
      }
   }
   foreach ($model_result['operation']['plus'] as $k=>$v){
      $model_result['total']+=$v;
   }
   $model_result['per_night']=$model_result['total']/count($date_diff);

   return $model_result;
}


//var_dump($model_result);
var_dump(cal_price_($room,$start_data,$end_data));

QUI IL FILE FUNZIONANTE
PHP:
<?php
/**
* Created by PhpS.
* User: macus
* Date: 20/01/2019
* Time: 14:27
*/
/*$hostname = "localhost";
$pass   = "PASSWORD";
$muser  = "USER";
$db ="DATABASE";
$mysqli = @new mysqli($hostname, $muser, $pass, $db);
if( mysqli_connect_errno())
{
  die(mysqli_connect_error());
}*/

$room="1";
$start_data="2019-08-26"; // data di arrivo
$end_data="2019-08-30"; // data di partenza


function get_diff_Date($dt1,$dt2){
   $start_date=new DateTime($dt1);
   $end_date=new DateTime($dt2);
   $diff=$end_date->diff($start_date);
   $create_date=[];
   for ($i=1;$i<=$diff->days;$i++) {
      $start_date->add(new DateInterval('P1D'));
      $create_date[]=
         [
            'date'=>$start_date->format('d/m/Y'),
            'day'=>$start_date->format('w'),
            'label_day'=>$start_date->format('l')
         ];
   }
   return $create_date;
}

function find_sconto(){
   /*
      'sconto'=>0,
   //percentuale o fisso (fixed)
      'type'=>'percentage',
      'skip_if_0'=>TRUE
   /*/
   $model_return=['sconto'=>0,'type'=>'percentage','ship_0'=>TRUE];
   return $model_return;
}

function cal_price_($room,$start_date,$end_date){
   //  $mysqli=&get_instance();
   $mysqli=new mysqli('host','user','pass','database');
   $date_diff=get_diff_Date($start_date,$end_date);
   $model_result=
      [
         'operation'=>
            [
               'plus'=>[
                  'custom'=>0,
                  'normal'=>0
               ],
//da implementare le regole di calcolo
               'minus'=>find_sconto()
            ],
         'total'=>0,
         'per_night'=>0
      ];

   $query=$mysqli->query('SELECT * FROM room WHERE id = '.$room);
   $data=json_decode(json_encode($query->fetch_all(MYSQLI_ASSOC)));
   //print_r($data);


   $query=$mysqli->query('SELECT * FROM room_custom_price WHERE (DATE(certain_date) BETWEEN "'.$start_date.'" AND "'.$end_date.'")');
   $data_custom=json_decode(json_encode($query->fetch_all(MYSQLI_ASSOC)));
   //print_r($data_custom);

   $map=['price_sun','price_mon','price_tue','price_wed','price_thu','price_fri','price_sat'];

   if(!empty($data_custom)){
      //non ci sono prezzi personalizzati
      foreach ($data_custom as $k=>$items){
         $model_result['operation']['plus']['custom']+=$items->price;
      }
   }
   foreach ($date_diff as $k=>$v){
      foreach ($data as $jey_q=>$value_q){
         $day=$map[$v['day']];
         $model_result['operation']['plus']['normal']+=$value_q->$day;
      }
   }
   foreach ($model_result['operation']['plus'] as $k=>$v){
      $model_result['total']+=$v;
   }
   $model_result['per_night']=$model_result['total']/count($date_diff);

   return $model_result;
}


//var_dump($model_result);
var_dump(cal_price_($room,$start_data,$end_data));
 
Ultima modifica:
Ho copiato il tuo codice ed inserito anche la parte mancante della funzione get_diff_Date
Ricevo questo errore: PHP Fatal error: Call to a member function diff() on null

Non riesco a capire perchè a te ti funzioni e a me no. Assurdo!
 
Utilizzando Crhome...
vai qui:https://perms.madi-solution.it/_a/test/index.php
premi CTRL+U
entri in view-source
e leggi il codice!

Lo riporto anche sotto per comodità!
PHP:
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
$room="1";
$start_data="2019-08-26"; // data di arrivo
$end_data="2019-08-30"; // data di partenza


function get_diff_Date($dt1,$dt2){
   $start_date=new DateTime($dt1);
   $end_date=new DateTime($dt2);
   $diff=$end_date->diff($start_date);
   $create_date=[];
   for ($i=1;$i<=$diff->days;$i++) {
      $start_date->add(new DateInterval('P1D'));
      $create_date[]=
         [
            'date'=>$start_date->format('d/m/Y'),
            'day'=>$start_date->format('w'),
            'label_day'=>$start_date->format('l')
         ];
   }
   return $create_date;
}

function find_sconto(){
   /*
      'sconto'=>0,
   //percentuale o fisso (fixed)
      'type'=>'percentage',
      'skip_if_0'=>TRUE
   /*/
   $model_return=['sconto'=>0,'type'=>'percentage','ship_0'=>TRUE];
   return $model_return;
}

function cal_price_($room,$start_date,$end_date){
   //  $mysqli=&get_instance();
   include_once('params.php');
   $mysqli=new mysqli($host,$user,$pass,$db);
   $date_diff=get_diff_Date($start_date,$end_date);
   $model_result=
      [
         'operation'=>
            [
               'plus'=>[
                  'custom'=>0,
                  'normal'=>0
               ],
//da implementare le regole di calcolo
               'minus'=>find_sconto()
            ],
         'total'=>0,
         'per_night'=>0
      ];

   $query=$mysqli->query('SELECT * FROM room WHERE id = '.$room);
   $data=json_decode(json_encode($query->fetch_all(MYSQLI_ASSOC)));
   //print_r($data);


   $query=$mysqli->query('SELECT * FROM room_custom_price WHERE (DATE(certain_date) BETWEEN "'.$start_date.'" AND "'.$end_date.'")');
   $data_custom=json_decode(json_encode($query->fetch_all(MYSQLI_ASSOC)));
   //print_r($data_custom);

   $map=['price_sun','price_mon','price_tue','price_wed','price_thu','price_fri','price_sat'];

   if(!empty($data_custom)){
      //non ci sono prezzi personalizzati
      foreach ($data_custom as $k=>$items){
         $model_result['operation']['plus']['custom']+=$items->price;
      }
   }
   foreach ($date_diff as $k=>$v){
      foreach ($data as $jey_q=>$value_q){
         $day=$map[$v['day']];
         $model_result['operation']['plus']['normal']+=$value_q->$day;
      }
   }
   foreach ($model_result['operation']['plus'] as $k=>$v){
      $model_result['total']+=$v;
   }
   $model_result['per_night']=$model_result['total']/count($date_diff);

   return $model_result;
}



//QUI LA VARIABILE NON É DICHIARATA E FORSE SONO PATATE
echo 'la prima volta è errore in quanto model_result è dichiarato nella funzione e non accessibile dall\'esterno<br>';
var_dump($model_result);

echo 'il risultato della funzione <br>';
//QUI CI VA LA FUNZIONE NON model_result
var_dump(cal_price_($room,$start_data,$end_data));
 
Si adesso finalmente ricevo i risultati. Grazie mille!!!
Un consiglio per utilizzare anche gli sconti aggiungo i campi nella tabella room_custom_price giusto?
 
Scusami ultima cosa perchè quando provo a stampare il totale complessivo causa un errore?
PHP:
echo $model_result['total'];
dovrebbe essere così oppure come al solito continuo a sbagliare.
 
La funzione torna un valore di natura array.... non puoi accedere a "model_result" fuori la funzione....
PHP:
$risultato_da_funzione=cal_price_($room,$start_data,$end_data);
echo $risultato_da_funzione['total'];
 
Ciao, ho la seguente query che mi prende le camere disponibili per ogni struttura ricettiva disponibile:
PHP:
$sqlselezione="SELECT * FROM room c WHERE c.coupon_shop='".$shopid."' AND c.capacita >= '".$ospiti."' AND c.coupon_city='1'  AND c.coupon_status='A' AND c.coupon_startdate <=now() AND c.coupon_enddate > now() AND c.id NOT IN ( SELECT couponid FROM coupons_purchase AS p WHERE ( p.stato='A' AND p.data_partenza > ".$data_post_arrivo_convertita." AND p.data_arrivo < ".$data_post_partenza_convertita." ) OR ( p.stato='A' AND p.data_partenza <= ".$data_post_arrivo_convertita." AND p.data_partenza >= ".$data_post_partenza_convertita." )) ORDER BY DESC LIMIT 1";
$resultselezione = mysqli_query($conn, $sqlselezione);
Come posso prendere la camera che ha il prezzo totale più basso ricavato dalla funzione di calcolo
PHP:
$risultato_da_funzione=cal_price_($room,$start_data,$end_data);
Quello che sono riuscito a fare è la somma dei prezzi c.price_mon + c.price_tue ecc... ed ordinarli nella query con ORDER BY per la somma più bassa ma non credo che sia corretto. Hai qualche idea su come fare? Grazie!
 
Ciao facendo dei controlli ho scoperto che la funzione di calcolo non effettua la somma correttamente.
Infatti se esistono dei prezzi custom li somma a quelli di base non escludendoli.

Es. in room il prezzo per tutti i giorni della settimana è di 70 euro.
In room_custom_price per il giorno 2019-08-27 ed il giorno 2019-08-28 ho impostato rispettivamente i prezzi di 80euro e 90euro.
Quindi il calcolo dovrebbe essere :
1 notte a 70
2 notte a 70
3 notte a 80
4 notte a 90
Totale 310 Euro mentre la funzione mi calcola un totale di 450 Euro

PHP:
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
$room="7";
$start_data="2019-08-26"; // data di arrivo
$end_data="2019-08-30"; // data di partenza


function get_diff_Date($dt1,$dt2){
   $start_data=new DateTime($dt1);
   $end_data=new DateTime($dt2);
   $diff=$end_data->diff($start_data);
   $create_date=[];
   for ($i=1;$i<=$diff->days;$i++) {
      $start_data->add(new DateInterval('P1D'));
      $create_date[]=
         [
            'date'=>$start_data->format('d/m/Y'),
            'day'=>$start_data->format('w'),
            'label_day'=>$start_data->format('l')
         ];
   }
   return $create_date;
}

function find_sconto(){
   /*
      'sconto'=>0,
   //percentuale o fisso (fixed)
      'type'=>'percentage',
      'skip_if_0'=>TRUE
   /*/
   $model_return=['sconto'=>0,'type'=>'percentage','ship_0'=>TRUE];
   return $model_return;
}

function cal_price_($room,$start_data,$end_data){
   //  $mysqli=&get_instance();
   $host = "localhost";
$pass   = "PASSWORD";
$user  = "USER";
$db ="DB";
   $mysqli=new mysqli($host,$user,$pass,$db);
   $date_diff=get_diff_Date($start_data,$end_data);
   $model_result=
      [
         'operation'=>
            [
               'plus'=>[
                  'custom'=>0,
                  'normal'=>0
               ],
//da implementare le regole di calcolo
               'minus'=>find_sconto()
            ],
         'total'=>0,
         'per_night'=>0
      ];

   $query=$mysqli->query('SELECT * FROM room WHERE id = '.$room);
   $data=json_decode(json_encode($query->fetch_all(MYSQLI_ASSOC)));
   //print_r($data);


   $query=$mysqli->query('SELECT * FROM room_custom_price WHERE (DATE(certain_date) BETWEEN "'.$start_data.'" AND "'.$end_data.'")');
   $data_custom=json_decode(json_encode($query->fetch_all(MYSQLI_ASSOC)));
   //print_r($data_custom);

   $map=['price_sun','price_mon','price_tue','price_wed','price_thu','price_fri','price_sat'];

   if(!empty($data_custom)){
      //non ci sono prezzi personalizzati
      foreach ($data_custom as $k=>$items){
         $model_result['operation']['plus']['custom']+=$items->price;
      }
   }
   foreach ($date_diff as $k=>$v){
      foreach ($data as $jey_q=>$value_q){
         $day=$map[$v['day']];
         $model_result['operation']['plus']['normal']+=$value_q->$day;
      }
   }
   foreach ($model_result['operation']['plus'] as $k=>$v){
      $model_result['total']+=$v;
   }
   $model_result['per_night']=$model_result['total']/count($date_diff);

   return $model_result;
}



$risultato_da_funzione=cal_price_($room,$start_data,$end_data);

$current_amount_calcolo=$risultato_da_funzione['total'];

echo "Totale $current_amount_calcolo";

Quale potrebbe essere l'errore?
 
Alla funzione get_Diff_date mi sono dimenticato di valorizzare il giorno in ingresso....
modifica come segue....
PHP:
function get_diff_Date($dt1,$dt2){
   $data_in=new DateTime($dt1);
   $data_out=new DateTime($dt2);
   $diff=$data_out->diff($data_in);
   $create_date=[];
/*******************************PARTE MANCANTE**************************************/   
$create_date[]=
      [
         'date'=>$data_in->format('d/m/Y'),
         'day'=>$data_in->format('w'),
         'label_day'=>$data_in->format('l')
      ];
/********************************FINE***************************************************/
   for ($i=1;$i<=$diff->days;$i++) {
      $data_in->add(new DateInterval('P1D'));
      $create_date[]=
         [
            'date'=>$data_in->format('d/m/Y'),
            'day'=>$data_in->format('w'),
            'label_day'=>$data_in->format('l')
         ];
   }
   return $create_date;
}
Ho aggiunto i dati che hai segnalato qui per verificare i calcoli.
 
Ho copiato il codice ed aggiornato i campi delle tabelle che mancavano ma il risultato finale è comunque errato
Quindi il calcolo dovrebbe essere :
1 notte a 70
2 notte a 70
3 notte a 80
4 notte a 90
Totale 310 Euro mentre la funzione mi calcola un totale di 450 Euro

Non riesco a comprendere ma nel tuo risultato i data price vengono sostituiti in quelli custom price se esistenti?
 

Discussioni simili