Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    if numbers sono contenuti in un certo range

    Salve ragazzi,

    Mi servirebbe far in modo di verificare che in una stringa di ids presa dal db es. {33,34,16,15,4} sia contenuto uno specifico numero o piu numeri che intendo verificare. Per esempio:

    $test = {33,34,16,17}

    se dovessi fare: if((strpos($test, '16') !== false), questo costrutto andrebbe bene, ma a me serve verificare 16 e 33 nello stesso if per esempio. Un altro scenario potrebbe essere che $test sia semplicemente {33} (senza alcuna virgola). Mi servirebbe una regex? Mi potreste aiutare, perche non conosco le espressioni regolari. Inoltre, nel costrutto con strpos, se cerco '4', questo sarebbe positivo anche nel caso di 34, cosa che ovviamente vorrei evitare.

    Spero possiate aiutarmi, grazie in anticipo!

  2. #2
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,337
    Puoi fare in modo di avere una stringa "regolare" cioè ,33,34,16,17, .
    In questo modo potresti avere
    if((strpos($test, ',16,') !== false) senza dovere usare le regexp.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  3. #3
    Usa un semplice explode e fai un ciclo per controllare i vari numeri:

    Codice PHP:
    $string "33,34,16,15,4";
    $check = [3316];

    function 
    check_numbers($string$check) {
        
    $numbers explode(','$string);
        foreach (
    $check as $n) {
            if (!
    in_array($n$numbers)) {
                return 
    false;
            }
        }
        return 
    true;
    }

    var_dump(check_numbers($string$check)); 

    P.S. faccio comunque notare che il titolo e il messaggio chiedono due cose diverse
    Ultima modifica di k.b; 22-02-2016 a 10:18

  4. #4
    Grazie ragazzi.

    @badaze: Purtroppo in certi casi il valore potrebbe essere solo ,16, quindi ho bisogno di una regex immagino.
    @k.b: grazie, ma non riesco a farlo funzionare.

    $string = "33,34,16,15,4"; <questo dovrebbe essere in questa forma [33,32,12], perche lo prendo diretto dal db.
    $check = [33, 16]; <questo e' invece l'array che vorrei avere io per controllare es. array('22','33','12')

    Se uso la funziona che mi hai dato, ricevo errore. come mai?

  5. #5
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,337
    Non capisco la tua risposta.

    Codice PHP:
    <?php 
    $test 
    '33,34,16,17';
    $test ",$test,";
    $cerca '16';
    if(
    strpos($test",$cerca,") !== false) {
     print 
    "#1 presente";
    } else {
     print 
    "#1 assente";
    }
    ?>
     <br/>
    <?php 
    $test 
    '16';
    $test ",$test,";
    $cerca '16';
    if(
    strpos($test",$cerca,") !== false) {
     print 
    "#2 presente";
    } else {
     print 
    "#2 assente";
    }
     
    ?>
    Ultima modifica di badaze; 22-02-2016 a 23:55
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  6. #6
    Quote Originariamente inviata da the blader Visualizza il messaggio
    Grazie ragazzi.

    @badaze: Purtroppo in certi casi il valore potrebbe essere solo ,16, quindi ho bisogno di una regex immagino.
    @k.b: grazie, ma non riesco a farlo funzionare.

    $string = "33,34,16,15,4"; <questo dovrebbe essere in questa forma [33,32,12], perche lo prendo diretto dal db.
    $check = [33, 16]; <questo e' invece l'array che vorrei avere io per controllare es. array('22','33','12')

    Se uso la funziona che mi hai dato, ricevo errore. come mai?
    E come faccio a saperlo se non mi dici QUALE errore?

    Comunque se ricevi i dati in quel formato dal database, puoi trattarli come un json e quindi fare
    Codice PHP:
    $numbers json_decode($stringa_dal_database); 
    invece dell'explode.

    Per il resto
    Codice PHP:
    $check = [3316]; 
    e' equivalente a
    Codice PHP:
    $check = array(3316); 
    e' solo la versione alternativa (per PHP recenti) per scrivere gli array.

    P.S. badaze perdonami ma la tua soluzione non si puo' guardare
    Ultima modifica di k.b; 23-02-2016 a 09:10

  7. #7
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,337
    Why ?
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  8. #8
    Quote Originariamente inviata da badaze Visualizza il messaggio
    Why ?
    Perche' e' importante usare soluzioni adatte al tipo di dati che stai trattando. In questo caso abbiamo chiaramente una lista di elementi con un preciso separatore (anzi, stando al formato indicato e' proprio un array codificato json) quindi e' naturale trattarli come un array.
    In questo modo molte altre cose che ti possono servire sono molto piu' semplici, ad esempio contare quanti numeri sono presenti nel dato originale, ordinarli, estrarne uno o piu', etc.

    Manipolare la stringa mettendo virgole qui e la' e' un accrocchio bruttissimo da vedere, e peraltro anche inutile perche' se devi cercare 4 senza avere 34 come risultato basta usare le regular expressions (che onestamente ogni programmatore anche amatoriale dovrebbe conoscere, almeno nelle basi).

  9. #9
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,337
    Quote Originariamente inviata da k.b Visualizza il messaggio
    Perche' e' importante usare soluzioni adatte al tipo di dati che stai trattando. In questo caso abbiamo chiaramente una lista di elementi con un preciso separatore (anzi, stando al formato indicato e' proprio un array codificato json) quindi e' naturale trattarli come un array.
    In questo modo molte altre cose che ti possono servire sono molto piu' semplici, ad esempio contare quanti numeri sono presenti nel dato originale, ordinarli, estrarne uno o piu', etc.
    The blader ha una stringa costruita secondo una logica che la rende quasi regolare. Non vuole estrarre i dati per ordinarli o sommarli ma bensi sapere se un valore è presente o meno i quella stringa.
    A questo punto aggiungere una virgola davanti e dietro la rende regolare e aggiungendo una virgola davanti e dietro al dato da cercare fa che si confrontano dati dello stesso tipo; ovvero un sottoinsieme di un insieme. Se non si aggiungessero le virgole non si confronterebbero cose dello stesso tipo in quanto la ricerca di 4 per esempio combacerebbe con ,34 o ,41. Mentre ,4, combacerà solo con ,4,. Tutto qua.


    Quote Originariamente inviata da k.b Visualizza il messaggio
    Manipolare la stringa mettendo virgole qui e la' e' un accrocchio bruttissimo da vedere, e peraltro anche inutile perche' se devi cercare 4 senza avere 34 come risultato basta usare le regular expressions (che onestamente ogni programmatore anche amatoriale dovrebbe conoscere, almeno nelle basi).
    Non capisco il tuo esempio ? Comunque. Senza essere un esperto me la cavo abbastanza bene con le regexp.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  10. #10
    Ma quella stringa e' la rappresentazione di una lista, quindi mi sembra naturale trattarla come tale.

    Ma a parte quello, il semplice regexp pattern
    codice:
    /\b4\b/
    matcha "4" ma non "14" o "42". Aggiungere virgole in giro e' una soluzione raffazzonata che funziona, ma e' meglio conoscere i tool che il linguaggio mette a disposizione.

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