Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 16 su 16
  1. #11
    Quote Originariamente inviata da optime Visualizza il messaggio
    se non sono in ordine è difficile abbinarli semplicemente scorrendoli. Capisco che li ordini in un modo diverso prima di caricarli nell'array, ma allora ordinali dopo. Non vedo altre strade, magari altri forumisti hanno altre soluzioni
    trovo il modo di ordinarli dopo e non è un problema. La difficoltà sta nel raggrupparli per date consecutive. come li raggruppo?

  2. #12
    te l'ho detto, confronti la data di fine di un evento con la data di inizio del successivo. se sono uguali metti come data di fine del corrente la data di fine del successivo (meglio, vai avanti finche non si interrompe la continuità). ti sarà d'aiuto un array di scarico dove metterai come data d'inizio la data d'inizio del primo record, come data di fine la data di fine dell'ultimo record sequenziale (quello prima della rottura)
    ARTRIPE

  3. #13
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    141
    Poiché la query originaria può restituire anche resultset non ordinati e dal momento che occorre l'array php ( probabilmente per modificare in seguito). Puoi svolgere tale compito tramite DateTime::diff con il contenuto della variabile della data (quindi dinamica) se è una stringa almeno che inizia con 'Y-m-d H:i:s' se 0000-00-00 o NULL o FALSE la data è assente (configurazione MYSQL), puoi impostare anche il timezone tramite la concatenazione di stringhe il punto per php.
    Codice PHP:
    $origin = new DateTime('2009-10-11 Europe/Rome');
    $target = new DateTime('2009-10-13 Europe/Rome');
    $interval $origin->diff($target);
    echo 
    $interval->format('%R%a days'); 
    oppure crei una variabile per contenere l'oggetto DateTime e poi lo trasformi in $date->format('U'); in UTC e fai altre operazioni.
    Beh prima dovrai raggruppare per ID e solo dopo la verifica di start con end, poiché non ordinato.
    Es. $arr = array(0 => array('ID' => 10), 1 => array('ID' => 10))
    prelevare il valore id e creare una variabile di contenimento per calcolare la data.
    Non riesco a trovare una buona ragione per calcolare ogni ID esistente, semmai per il singolo id se è un'agenda o promemoria se da usare per il proprietario di tale id.
    Nota* Da php 8.1 diff calcola il momento (cioè direttamente la data compreso il timezone, mentre in precedenza erroneamente calcolava alla conversione UTC).
    Ultima modifica di darbula; 29-12-2021 a 15:29

  4. #14
    ok grazie, provo entrambi le soluzioni, quella che mi resta più comoda e più leggera applico.

    Grazie.

  5. #15
    codice:
    $dati[0]['id']=1;
    $dati[0]['inizio']='2021-01-12 08:00:00';
    $dati[0]['fine']='2021-01-12 08:30:00';
    
    
    $dati[1]['id']=1;
    $dati[1]['inizio']='2021-01-12 11:00:00';
    $dati[1]['fine']='2021-01-12 11:10:00';
    
    
    $dati[2]['id']=1;
    $dati[2]['inizio']='2021-01-12 08:30:00';
    $dati[2]['fine']='2021-01-12 08:40:00';
    
    
    $dati[3]['id']=1;
    $dati[3]['inizio']='2021-01-12 10:00:00';
    $dati[3]['fine']='2021-01-12 11:00:00';
    Metti la prima data di inizio e la prima data di fine in due variabili.
    $i = inizio_1;
    $f = fine_1;
    Passi alla seconda data di inizio e la confronti con la prima data di fine.
    Se è identica, questa seconda data di inizio diventa la "prima" e prosegui con il terzo gruppo.
    if inizio_2 == $f -> $f = fine_2;
    Se è diversa, è un altro "intervallo" e ricominci il ciclo "scartando" il primo e il secondo gruppo (dati[0] e dati[1]) o comunque scartando fin dove sei arrivato, così da iniziare da questa accoppiata che "non c'entra nulla con quanto iniziato".
    Teoricamente dovrebbe funzionare, tutto sta nel come scriverlo :-D
    Il problema può sorgere nel caso in cui, ad esempio, tu abbia qualcosa di questo genere
    codice:
    $dati[0]['id']=1;
    $dati[0]['inizio']='2021-01-12 08:00:00';
    $dati[0]['fine']='2021-01-12 08:30:00';
    
    
    $dati[1]['id']=1;
    $dati[1]['inizio']='2021-01-12 08:40:00';
    $dati[1]['fine']='2021-01-12 09:10:00';
    
    
    $dati[2]['id']=1;
    $dati[2]['inizio']='2021-01-12 08:30:00';
    $dati[2]['fine']='2021-01-12 08:40:00';
    
    
    $dati[3]['id']=1;
    $dati[3]['inizio']='2021-01-12 10:00:00';
    $dati[3]['fine']='2021-01-12 11:00:00';
    In questo caso dati[1] è consecutivo a dati[2] ma verrebbe scartato dall'approccio di cui sopra. Il rimedio potrebbe essere un sorting degli array in base alla data inizio, ovvero usando il array_multisort (la doc di Php ha un esempio molto simile al tuo caso) oppure con array_walk (doc di php ancora una volta in aiuto)

  6. #16
    Quote Originariamente inviata da Dascos Visualizza il messaggio
    ... Il rimedio potrebbe essere un sorting degli array in base alla data inizio...
    è un pezzo che glielo sto dicendo...
    ARTRIPE

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 © 2022 vBulletin Solutions, Inc. All rights reserved.