如何在php数组中将空值转换为空字符串?

时间:2011-01-28 11:47:55

标签: php arrays null

我想转换这个Array [4]不应该为null的数组,它可以给出空格(空字符串)。

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

(改变的原因,与一般问题无关)

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

10 个答案:

答案 0 :(得分:29)

PHP 5.3 +

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

答案 1 :(得分:20)

然后你应该循环遍历数组元素,检查每个值为null并用空字符串替换它。这样的事情:

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

此外,您可以实现检查功能并使用array_map()功能。

答案 2 :(得分:4)

这会将数组映射到一个新数组,该数组利用null三元运算符来包含数组的原始值,如果该值为null,则为空字符串。

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

答案 3 :(得分:2)

您可以改用它。

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

答案 4 :(得分:1)

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

答案 5 :(得分:1)

使用此功能。这将在嵌套数组中将null替换为空字符串

$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;
    }

输出将是:

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

在线尝试:https://3v4l.org/7uXTL

答案 6 :(得分:1)

以上是我在上述答案中未提及的在线技巧:

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

这对于$_GET参数加载非常方便,可以保持简洁和可读性。如果您只接受整数,则可以将strval()替换为trim() ...或替换为intval()

intval的默认值如果丢失则为0或非数字值。 strval的默认值为"",如果为空,null或false。

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

See DEMO

现在对于一个数组,你仍然需要遍历每个值并设置它。但它非常易读,IMO:

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

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

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

结果如下:

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

有趣的是,true变为“1”,但'true'保持字符串,false变为空字符串""

现在使用$arr[$key] = intval($value);的相同数据产生了这个结果:

['1','4','0','0','0','0','1','0','0']

答案 7 :(得分:1)

甚至有更好/更短/更简单的解决方案。汇编已经给出的答案。对于初始数据

[1, 4, "0", "V", null, false, true, 'true', "N"]

使用

$result = array_map('strval', $arr);

$ result 将是

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

这甚至在php4中也可以工作:)

答案 8 :(得分:0)

可以使用以下命令一行解决该问题:

array_walk($array_json_return,function(&$item){$item=strval($item);});

这里$ array_json_return是数组。

答案 9 :(得分:0)

迟到的回答;-) 鉴于您插入数据的方式,您可以简单地将值转换到所需的类型,这应该可以工作。