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

    [php] distinguere la stringa "0" dalla stringa "-0"

    Ciao a tutti!

    Ho la seguente porzione di codice:
    codice:
    $a="-0";
    $b=abs($a);
    if ($a==$b)
    	print ("le due stringhe sono uguali");
    else
    	print ("le due stringhe sono diverse");
    Il problema è che mi viene visualizzato "le due stringhe sono uguali" quando invece la stringa "0" è diversa da "-0". Come posso fare per distinguere la stringa "0" dalla stringa "-0"? A me era venuto in mente questo:
    codice:
    if (strlen($a)==strlen($b))
    ovvero confrontare la lunghezza delle variabili; in tal caso la lunghezza della variabile-stringa $a è 2 mentre la lunghezza della variabile-numero $b convertita in stringa è 1.

    Qualcuno ha in mente una soluzione migliore? Un grazie anticipato!

  2. #2
    Utente di HTML.it L'avatar di VaLvOnAuTa
    Registrato dal
    Jun 2002
    Messaggi
    2,003
    Ho provato con strval($a) == strval($b) però mi dice che le strighe sono comunque uguali.
    Ho provato anche con "-0" == "0" e mi fa lo stesso.. non so che dire... forse la tua soluzione, tra tutte, è l'unica

  3. #3
    Non so bene se il php permetta quello che vuoi fare tu, ma evidentemente no.

    In ogni caso abs si applica ai numeri interi mentre "-0" è una stringa.

    Le stringhe vanno trattate come array: se vuoi passare da "-numero" a "numero" devi copiare in b il valore di a dal secondo carattere (indice 1) in poi...
    è meglio tacere e far credere di essere stupido piuttosto che parlare e togliere ogni dubbio

  4. #4
    Utente di HTML.it L'avatar di VaLvOnAuTa
    Registrato dal
    Jun 2002
    Messaggi
    2,003
    anche facendo
    $b = strval(abs(intval($a)));
    fa lo stesso... a me pare strano.

  5. #5
    if( $a === $b ) ...
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  6. #6
    Originariamente inviato da andr3a
    if( $a === $b ) ...
    uffa la sapevo anch'io la risposta
    MiServe di Santino Bivacqua
    PHP/Ruby/Node.js Developer
    www.miserve.com

  7. #7
    Prima di tutto grazie per le vostre numerose risposte!

    VaLvOnAuTa, l'avevo fatta anch'io la prova con "-0" == "0" però mi diceva che le stringhe sono uguali. Che strano... Forse l'operatore == in questo caso effettua un casting un po' strano? Se ricordiamo poi che la stringa "0" è sempre stata un po' rognosa da gestire in Php forse questa potrebbe essere una spiegazione... Comunque è veramente strano... :master:

    luqwe, hai ragione, "-0" è una stringa, ma ho sfruttato il fatto che in certi casi, come in questo, il Php fa un casting automatico delle variabili in gioco. So che non è una programmazione molto elegante, tuttavia sapendo a priori che la stringa rappresenta un numero (perchè ho già fatto dei controlli prima) mi sento autorizzato ad usare la funzione abs.

    andr3a, purtroppo in questo caso l'operatore di "identico a" non va bene perchè essendo $a una stringa e $b un numero mi verrebbe restituito sempre e comunque FALSE qualsiasi sia il numero che rappresenta la stringa $a.

    Secondo me, come dicevo prima, potrebbe esserci in ballo qualche casting strano che fa il Php quando si trova tra le mani la stringa "0", che come sappiamo tutti è sempre stata un bel casino da gestire...

  8. #8
    Utente di HTML.it L'avatar di kuarl
    Registrato dal
    Oct 2001
    Messaggi
    1,093
    "0" in php viene considerato false, così come lo 0 intero
    "-0" invece viene considerato come una stringa normale, e quindi true

    io farei:
    codice:
    $a="-0";
    $b=(string)abs($a);
    if ($a==$b)
    	print ("le due stringhe sono uguali");
    else
    	print ("le due stringhe sono diverse");

  9. #9
    Ciao,
    ma l'operatore === (3 volte uguale) che ti ha indicato andr3a non ti funziona?
    per favore NIENTE PVT TECNICI da sconosciuti

  10. #10
    insisto ... mettila come ti pare, casti a stringa l' abs e poi fai:

    if( $a === $b ) ... eccetera, insomma basta fare 1 prova ...



    codice:
    $a= "-0";
    $b= ( string ) abs( $a );
    if( $a === $b )
    	print ("le due stringhe sono uguali");
    else
    	print ("le due stringhe sono diverse");

    P.S. kuarl la tua con i 2 = non va lostesso, non e' il problema di casting ma di operatore di confronto
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

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.