Cosa succede se effettuiamo l’explode con PHP di una stringa vuota?
Stai utilizzando il controllo in_array() con explode() e PHP entra sempre nel controllo?
Vediamo insieme come risolvere.
Introduzione
Utilizzando l’explode su una stringa vuota, ci siamo accorti che PHP tornava sempre un array vuoto. Quello che succedeva è che nel nostro controllo su valori numerici, comprensivo anche di 0, PHP entrava sempre creando dei valori falsati.
Il codice seguente è un esempio di quello che stavamo facendo:
$value = "0,1,2"; $checked = explode(',',$value); foreach($categories as $k => $category){ if(is_array($checked ) && in_array($k, $checked )) { $is_checked = 1; } }
Un loop di variabili e all’interno di questo loop un controllo per verificare se il valore era checked oppure no.
Il problema arrivava quando la variabile $value era vuota.
$value = ""; $checked = explode(',',$value); print_R($checked);
PHP in questo caso torna sempre un array vuoto quindi impossibile verificarlo con is_array()
Array ( [0] => )
e questo per noi era un problema dato che il controllo is_array() era sempre true e in_array() su valore 0 idem, il campo era sempre checked.
Per risolvere abbiamo utilizzato la funzione array_filter() per escludere i valori vuoti quindi:
$value = ""; $checked = array_filter(explode(',',$value)); print_R($checked);
Ecco che con array filter torna un array vuoto come dovrebbe essere.
Array ( )