[PHP] Preg Match e Uninitialized string offset

Discussione in 'PHP' iniziata da virus380, 9 Agosto 2018.

  1. virus380

    virus380 Nuovo Utente

    Registrato:
    9 Agosto 2018
    Messaggi:
    4
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Ciao a tutti ragazzi,
    Devo fare un programma che dati dei titoli dei libri,all' interno ci siano 2 o 3 numeri,
    tra loro almeno una lettera e, il nuovo numero (successivo) deve essere il multiplo di quello che lo precede.

    Funziona tutto ha solo due problemi (quindi non funziona al 100%)
    Problemi:
    1) Non funziona correttamente il preg_match ovvero funziona solo se metto almeno una lettera tra due numeri. esempio:
    Funziona -> ooo 1 oo 4 oo 8 oo
    NON funziona -> oo 1 4 oo 8 oo (vedete appena lascio uno spazio tra i due numeri già non funziona più) A me serve che ci deve essere sempre una lettera tra OGNI numero !

    2) l'altro problema che ho è che visto che devo calcolare i multipli non so come togliere lo 0 dal terzo elemento, prima mi dava l'errore Uninitialized string offset sono riuscito a risolvere mettendo un empty davanti, ma comunque non riesco a dirgli che quando $INT[3] è uguale a 0 non deve mostrarmelo...

    ecco il codice:

    PHP:
    function filtrolibri6($fascicolo1){
                foreach  (
    $fascicolo1 as $chiave1 => $valore1){
                    if(
    preg_match('/[0-9].*[A-Za-z]{1}.*[0-9]/'$valore1)  == true){
                       
    $int filter_var($valore1FILTER_SANITIZE_NUMBER_INT);
                        if(
    $int[0] <> and $int[1] <> ){
                              if(
    $int[0] < $int[1] and empty($int[2])){
                              if(
    $int[1] % $int[0] == ){
                               
    $ok2[]= $chiave1 .'=>'$valore1;
                            }
                              }
                              if(
    $int[0] < $int[1] and !empty($int[2])){ 
                              
                              
                              if(
    $int[2] % $int[1] == ){           
                               
    $ok2[]= $chiave1.' '' => '$valore1;
                            }     
                              } 
                          }       
                    }
                    
                }
                return 
    $ok2;
    }
    $test2 filtrolibri6($fascicolo1);
    foreach(
    $test2 as $chiave2 => $prova2){ 
        echo 
    $prova2 "<br>"
    }

    Come avete visto ho voluto fare l'echo all'esterno della funzione, perchè credo che sia più giusto.
    Un altra cosa, da poco ho iniziato a cimentarmi sul php ma quali altri modi avevo per fare questo esercizio? Cioè mi pare che si possa fare solo con le regex o no?

    Comunque vi ringrazio tantissimo se mi date una mano a risolvere quei due errori / imperfezioni.
     
  2. virus380

    virus380 Nuovo Utente

    Registrato:
    9 Agosto 2018
    Messaggi:
    4
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Gente molto preparata vedo.

    Il secondo punto posso capire, ma l espressioni regolari credevo che a qualcuno fosse più chiaro di me.
     
  3. Max 1

    Max 1 Super Moderatore Membro dello Staff SUPER MOD MOD

    Registrato:
    29 Febbraio 2012
    Messaggi:
    3.261
    Mi Piace Ricevuti:
    249
    Punteggio:
    63
    Sesso:
    Maschio
    @virus380
    Qui nessuno è obbligato a risponderti specialmente in una notte! Che sia chiaro!
    Inoltre su questo forum non sono ammesse ironie e giudizi gratuiti buttati lì a caso e senza nessun fondamento.
    Per tua conoscenza su questo forum è presente gente molto molto preparata che non ha problemi a rispondere a qualsiasi quesito e che non merita giudizi da uno che chiede aiuto per incompetenza!

    Prima di tornare a scrivere leggi accuratamente il regolamento del forum e delle sezioni dove posti!
    Primo avvertimento!
     
  4. virus380

    virus380 Nuovo Utente

    Registrato:
    9 Agosto 2018
    Messaggi:
    4
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Hai ragione, Vi/chiedo Scusa.
    Grazie per la seconda possibilità.

    Se qualcuno sa aiutarmi lo ringrazio.

    Utilizzando solo questa preg_match si accerta che ci sia una lettera tra ogni numero però vuole per forza 3 numeri...e non va bene perchè mi deve andare anche con soli due numeri
    PHP:
    [0-9].*[A-Za-z]{1}.[0-9].*[A-Za-z]{1}.*[0-9]
     
  5. mr.x

    mr.x Utente Attivo

    Registrato:
    9 Aprile 2016
    Messaggi:
    164
    Mi Piace Ricevuti:
    20
    Punteggio:
    28
    la regex per il controllo su questo schema-path "ooo 1 oo 4 oo 8 oo" di esempio

    PHP:
    /(\w.*?\d.+?){3}|(\w.+?\d.+?){2}/
    per il secondo quesito se la regex è ok ti estrai le parti numeriche e fai il confronto per vedere se sono multiple di quelle a sinistra

    PHP:
    $stringa="aa 8 b 16ccc32";
    $ris="";
    if (
    preg_match('/(\w.*?\d.+?){3}|(\w.+?\d.+?){2}/'$stringa$ris) ==true) {

    $str=implode(" "$ris);

    preg_match_all('/\d.+?/'$str$array);

    $count=count($array[0]);

    $n=0;

    for(
    $n=0$n<$count$n++) {
    if (
    $n>0){
    if (
    $array[0][$n]==($array[0][$n-1])*2)
    echo 
    $array[0][$n]."<br>";
    }
    }
     } else { echo 
    " no match"; }
     
Sto caricando...

Condividi questa Pagina