2011-01-28 24 views
8

Quiero convertir esta matriz que Array [4] no debe dar nulo, puede dar espacio en blanco (cadena vacía).Cómo convertir los valores nulos en cadena vacía en una matriz php?

Array (
    [0] => 1 
    [1] => 4 
    [2] => 0 
    [3] => V 
    [4] => 
    [5] => N 
); 

(La razón para el cambio, sin relación con la cuestión general)

Fatal error: Uncaught exception 
'PDOException' with message 'Database 
error [23000]: Column 'message' cannot 
be null, driver error code is 1048' in 

Respuesta

11

A continuación, sólo debe recorrer elementos de la matriz, compruebe cada valor de nulo y sustituirla por cadena vacía . Algo así:

foreach ($array as $key => $value) { 
    if (is_null($value)) { 
     $array[$key] = ""; 
    } 
} 

Además, se puede implementar la función de comprobación y utilizar array_map() función.

1
foreach($array as $key=>$value) 
{ 
if($value===NULL) 
{ 
$array[$key]=""; 
} 
} 
+0

'0 == null' es' true' también. Debería haber usado la identidad ('==='). –

17

PHP 5.3+

$array = array_map(function($v){ 
     return (is_null($v)) ? "" : $v; 
    },$array); 
3

Esto mapear la matriz a una nueva matriz que utiliza el operador ternario null para incluir su valor original de la matriz, o una cadena vacía si ese valor es nulo.

$array = array_map(function($v){ 
    return $v ?: ''; 
},$array); 
0

Utilice esta función. Esto reemplazará nula a cadena vacía en matriz anidada también

$arr = array(
      "key1"=>"value1", 
      "key2"=>null, 
      "key3"=>array(
       "subkey1"=>null, 
       "subkey2"=>"subvalue2"), 
      "key4"=>null); 

    echo json_encode(replace_null_with_empty_string($arr)); 

    function replace_null_with_empty_string($array) 
    { 
     foreach ($array as $key => $value) 
     { 
      if(is_array($value)) 
       $array[$key] = replace_null_with_empty_string($value); 
      else 
      { 
       if (is_null($value)) 
        $array[$key] = ""; 
      } 
     } 
     return $array; 
    } 

de salida será:

{ 
    "key1": "value1", 
    "key2": "", 
    "key3": { 
    "subkey1": "", 
    "subkey2": "subvalue2" 
    }, 
    "key4": "" 
} 

Trate en línea aquí: https://3v4l.org/7uXTL

1

Puede utilizar este lugar.

array_map(function($val){return is_null($val)? "" : $val;},$result); 
1

He aquí un truco en línea que no he visto mencionado en las respuestas anteriores:

$val = strval(@$arr["notfound"]); // will not generate errors and 
            // defaults to an empty string 

Esto es súper práctico para $_GET parámetro de carga para mantener las cosas a corto y fácil de leer. Además, puede reemplazar strval() con trim() ... o con intval() si solo acepta números enteros.

El valor predeterminado para intval será 0 si falta o es un valor no numérico. El valor predeterminado para strval es "" si está vacío, nulo o falso.

$val_str = strval(@$_GET['q']); 
$val_int = intval(@$_GET['offset']); 

See DEMO

ya por una matriz, que todavía tendrá que bucle sobre todos los valores y la pusieron.Pero es muy fácil de leer, la OMI:

$arr = Array (1, 4, "0", "V", null, false, true, 'true', "N"); 

foreach ($arr as $key=>$value) { 
    $arr[$key] = strval($value); 
} 

echo ("['".implode("','", $arr)."']"); 

aquí está el resultado:

['1','4','0','V','','','1','true','N'] 

interesante es que true se convierte en "1", pero 'true' se mantiene una cadena y que false convierte y vacío cadena "".

Ahora los mismos datos utilizando $arr[$key] = intval($value); produce este resultado:

['1','4','0','0','0','0','1','0','0'] 
Cuestiones relacionadas