Domanda

voglio un 0 per essere considerata come un intero e un '0' essere considerato come una stringa ma vuoto () considera il '0' come stringa nel seguente esempio,

$var = '0';

// Evaluates to true because $var is empty
if (empty($var)) {
    echo '$var is empty';
}

Come posso 'make' svuotare () per prendere '0 di come stringhe?

Grazie.

È stato utile?

Soluzione

Non è possibile farlo. Ecco come è stato progettato. Invece si può scrivere una dichiarazione and alla prova:

if (empty($var) && $var !== '0') {
    echo $var . ' is empty';
}

Si potrebbe usare isset, a meno che naturalmente, si vuole allontanarsi gli altri vuoti, che i controlli empty per.

Modifica

fissi l'assegno di fare un controllo di tipo e, grazie al 2371 per la segnalazione:)

Altri suggerimenti

Non è possibile con empty. Dal Manuale PHP:

  

Le seguenti cose sono considerati vuoti:

     
      
  • "" (una stringa vuota)
  •   
  • 0 (0 per un numero intero)
  •   
  • "0" (0 come una stringa)
  •   
  • NULL
  •   
  • false
  •   
  • array () (un array vuoto)
  •   
  • var $ var; (Una variabile dichiarata, ma senza un valore in una classe)
  •   

Si deve aggiungere un ulteriore altro controllo.

Non è possibile solo con vuote (). Vedere la manuale . Si può fare questo, però:

if ($var !== '0' && empty($var)) {
   echo "$var is empty and is not string '0'";
}

Fondamentalmente, svuotare () esegue la stessa:

if (!$var) ...

Ma non fa scattare un avviso PHP quando la variabile non è impostato.

Non è possibile. Da manuale

  

restituisce FALSE se var ha un valore non-zero non vuoto e.

     

Le seguenti cose sono considerati vuoti:

     
      
  • "" (una stringa vuota)
  •   
  • 0 (0 per un numero intero)
  •   
  • "0" (0 come una stringa)
  •   
  • NULL
  •   
  • false
  •   
  • array () (un array vuoto)
  •   
  • var $ var; (Una variabile dichiarata, ma senza un valore in una classe)
  •   

PHP ha diverse funzioni che possono essere utilizzati per verificare il valore di una variabile. Tre funzioni utili per questo sono isset (), vuoto () e is_null (). Tutte queste funzioni restituiscono un valore booleano. Se queste funzioni non sono utilizzati in modo corretto possono causare risultati imprevisti.

isset () e vuoto () sono visti spesso come funzioni che sono opposti, tuttavia questo non è sempre vero. In questo post vi spiegherò le differenze tra queste funzioni.

isset ()

Da PHP manuale - isset ():

isset — Determine if a variable is set and is not NULL

In altre parole, restituisce vero solo quando la variabile non è nullo. svuotare ()

Da PHP Manuale - vuoto ():

empty — Determine whether a variable is empty

In altre parole, esso ritorna vero se la variabile è una stringa vuota, false, array (), NULL, “0 ?, 0, e una variabile impostata. is_null ()

Da PHP Manuale - is_null ():

is_null — Finds whether a variable is NULL

In altre parole, restituisce vero solo quando la variabile è nullo. is_null () è l'opposto di isset (), ad eccezione di una differenza che isset () può essere applicato a variabili sconosciute, ma is_null () solo per le variabili dichiarate.

La tabella in foto è un facile riferimento per ciò che queste funzioni torneranno per diversi valori. Gli spazi vuoti significa che la funzione restituisce bool (false). entrare descrizione dell'immagine qui

funzione personalizzata Inoltre ho fatto per il controllo di tutte le cose.

function checkEmpty($var, $term = ""){
    if(isset($var) && trim($var) != "" && (!empty($var) || trim($var) == 0)){
        return true;
    }
    else{
        if($term != ""){
            return array("status" => "error", "desc" => "$term can not be empty");
        }
        else{
            return array("status" => "error", "desc" => "value can not be empty");
        }
    }
}

In entrambi i casi il vostro empty() tornerà true. Controllare il doc -. http://php.net/empty

Suggerisco usando una funzione diversa per abbinare il vostro spec.

Ho sempre aggiungere alla mia base di codice

function is_blank($value) {
    return empty($value) && !is_numeric($value);
}

e l'uso invece di vuoto (). Risolve il problema di mantenere zeri (int, float o stringa) non vuota.

http://www.php.net/manual/en /function.empty.php#103756 che è stata aggiunta maggio 2011.

$var = '0';

// Evaluates to true because $var is empty
if (empty($var) && $var !== '0') {
    echo '$var is empty or the string "0"';
}

empty è di gran lunga la funzione più confuso e inutile nel repertorio php. Non utilizzarlo.

Ci sono tre cose separate vuoi sapere quando si controlla un valore.

  • il valore esiste (uso isset)
  • il valore ha un tipo specifico (uso is_xxx)
  • il valore ha proprietà specifiche (operatori di confronto uso, strpos o espressioni regolari).

(gli ultimi due possono essere combinati in uno con typecasts o '===').

Esempi:

if(isset($var) && is_string($var) && strlen($var) > 0)...
if(isset($var) && intval($var) > 0)...
if(isset($var) && $var === '0')...

Questo sembra più prolisso, ma mostra chiaramente quello che stai facendo. Per gli oggetti strutturali spesso senso avere un getter scorciatoia, per esempio.

 /// get a string
 function s($ary, $key, $default = '') {
     if(!isset($ary[$key])) return $default;
     $s = trim($ary[$key]);
     return strlen($s) ? $s : $default;
 }
 /// get a natural number
 function n($ary, $key, $default = 0) {
     $n = intval(s($ary, $key));
     return $n > 0 ? $n : $default;
 }

 $name = s($_POST, 'name');
 $age  = n($_POST, 'age');

In questo caso non utilizzare vuoto, uso isset () al posto di esso. Ciò consentirà anche 0 come un intero.

$var = '0';
if (!isset($var)) {
    print '$var is not set';
}

$var = 0;
if (!isset($var)) {
    print '$var is not set';
}

Nessuno deve stampare qualsiasi cosa.

Non puoi, perché integer, string, float, null non importa per PHP.

Perché è cool:)

È necessario verificare caratteristico dispone la variabile is_numeric, isset, ===, strlen, ecc.

Ad esempio:

if (strlen(@$var)==0) {
    echo @$var . ' is empty';
}

o

if (@$var==="" || !isset($var)) {
    echo @$var . ' is empty';
}

o altri esempi:)

grazie per la lettura.

Se si vuole saltare il filtro $ vuota e Non saltare $ filter = '0' e gli altri I valori

$filter = ''; //or $filter = '0'; or $filter = '1';

//trim the $filter

if( isset($filter) and ( $filter != '' or $filter == '0') ) {

//$filter data 

};

if ( (is_array($var) && empty($var)) || strlen($var) === 0 ) { echo $var . ' is empty'; }

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top