Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    505

    controllare se un array contiene solo interi

    salve, vorrei verificare in php se un array contiene solo numeri.

    ho costruito questa funzioncina, ma magari c'è qualcosa di meglio :
    codice:
        if ((isset($_POST['cbid'])) && is_array($_POST['cbid'])) {
            $isint=true;
            foreach ($_POST['cbid'] as $k=>$trackid) {
                if(!is_numeric($trackid)) {
                    $isint=false;
                }
            }
            
            if($isint) {
                foreach ($_POST['cbid'] as $k=>$trackid) {
                    $delete=mysql_query("DELETE FROM catetracklist WHERE idcate='".$_GET['category']."' AND trackid='$trackid'",$mydb);		
                }
            }
        }

  2. #2
    Ciao, puoi eseguire la query appena trovi un valore non intero, così risparmi un ciclo:

    Codice PHP:
    if ((isset($_POST['cbid'])) && is_array($_POST['cbid'])) {

        foreach (
    $_POST['cbid'] as $k=>$trackid) {
            if(!
    is_numeric($trackid)) {
                 
    $delete mysql_query("DELETE FROM catetracklist WHERE idcate='".$_GET['category']."' AND trackid='$trackid'"$mydb);
            }
        }


  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    505
    giusto, il fatto è che a me serve una funzione che fà il delete se e solo se tutti i valori sono interi, non solo per quelli interi

    p.s. un' altra cosa positiva sarebbe costruire la query come stringa, poi fare un singolo delete (ma non ho idea come si faccia il delete multiplo in una sola passata).

  4. #4
    Tu vuoi eseguire la query solo se l'array contiene tutti numeri interi?

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    505
    uhm...diciamo che io ho un array con 10 interi. (es. 1-2-3-...-9-10). se anche solo un valore non è intero deve scartare il delete.

    poi appunto deve farmi un delete su quelle 10 righe nel db (solo che così come lo faccio io fà 10 connessioni per 10 delete...sicuramente si può fare solo un delete su quelle 10 righe, costruendo progressivamente la query come stringa).

  6. #6
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230
    Codice PHP:
    $array = array('1','2','3','4','5');
    if(
    array_filter($array,"ctype_digit") == $array){
            
    mysql_query('delete from `tabella` where `id` in('.implode(',',$array).')');


  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    505
    grazie maestro!!!

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    505
    ma è meglio usare ctype_digit() o is_numeric()? tempo fà lessi una guida (non ricordo dove) che sconsigliava l'uso di is_numeric()...

  9. #9
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230
    Non e' che una funzione sia meglio dell'altra, dipende come sempre da caso a caso. Ognuna delle due funzioni ha il suo scopo.

    Ad esempio se, come sopra, ti arrivano dei dati da un form html, e tu vuoi controllare che ci siano solo cifre per la query, usi ctype_digit, perche' questa funzione accetta stringhe (e i dati dal html anche se sono interi arrivano sotto forma di stringa), e controlla effettivamente che ci siano solo cifre.

    is_numeric invece controlla che un dato sia un numero, e il concetto di numero e' piu' ampio del concetto "solo cifre". Ad esempio i seguenti sono tutti numeri: 2e5, 0xff, -1.9.

    Quindi devi usare is_numeric se ti aspetti dei numeri in qualsiasi forma e di qualsiasi tipo (ad es. per operazioni aritmetiche), e devi usare ctype_digit se vuoi controllare una cosa come sopra, cioe' che il dato contenga solo cifre, devi usare is_int se vuoi solo dati di tipo intero positivi e negativi, devi usare is_float per quelli in virgola mobile, e cosi via.

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    505
    ottimo! grazie per l'ennesima delucidazione. buona giornata

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