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

23

我想将这个数组转换,使得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
9个回答

46

PHP 5.3+

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

28

那么你应该遍历数组元素,检查每个值是否为空,并将其替换为空字符串。就像这样:

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

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


9
有更好/更短/更简单的解决方案。编译已经给出的答案。对于初始数据,可以使用以下代码:
[1, 4, "0", "V", null, false, true, 'true', "N"]

使用

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

$result将会是:

['1', '4', '0', 'V', '', '', '1', 'true', 'N']
这应该在php4中也能正常工作 :)

8
这将把数组映射到一个新的数组,利用null三元运算符来包含原始数组的值,或者如果该值为null,则包含空字符串。
$array = array_map(function($v){
    return $v ?: '';
},$array);

PHP7.4:$array = array_map(fn($v) => $v ?: '', $array); :D - undefined
从技术上讲,?: 会将假值替换为空字符串。?? 可以用于仅替换空值 - 这仅适用于 PHP7+。 - undefined

2
这是一种我在上面的回答中没有看到过的技巧:
$val = strval(@$arr["notfound"]);  // will not generate errors and
                                   // defaults to an empty string

这对于加载$_GET参数非常方便,可以使内容简短易读。此外,您还可以将strval()替换为trim()……或者如果只接受整数,则可以使用intval()
如果缺少或非数字值,则intval的默认值为0。如果为空、null或false,则strval的默认值为""
$val_str = strval(@$_GET['q']);
$val_int = intval(@$_GET['offset']);

查看演示

现在对于一个数组,你仍然需要循环每个值并设置它。但是在我看来,这非常易读:

$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']

1
$val_int = intval(@$_GET['offset']); 这个对我有用,谢谢。 - VIKAS KATARIYA

2
你可以使用这个替代。
array_map(function($val){return is_null($val)? "" : $val;},$result);

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

0 == NULL 也是 TRUE。应该使用恒等运算符 (===)。 - Linus Kleen

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


0

这可以使用一行代码解决:

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

这里的 $array_json_return 是数组。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接